为什么StringMethods比较的结果不会自动转换为布尔数组?

问题描述 投票:0回答:2

我正在测试我的数据集,并试图使用pandas StringMethods比较字符串,并发现我无法将StringMethods生成的布尔数组与另一个布尔数组进行比较,除非将其保存到变量中

import pandas as pd

df = pd.DataFrame([{"pet":"cat", "gender":"M"}, {"pet":"Cat", "gender":"M"}, {"pet":"dog", "gender":"F"}])

result = df[df.gender== "M" & df.pet.str.lower() == "cat"]
# TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]

但是在使用二元运算符之前将其保存到变量时似乎可行。

first = df.gender == "M"
second = df.pet.str.lower() == "cat"
df[(first) & (second)]

#   gender  pet
# 0      M  cat
# 1      M  Cat

根据错误消息,df.pet.str.lower() == "cat"不会转换为布尔数组,直到我将它们保存到变量。为什么StringMethods比较的结果不会自动转换为布尔数组?

python pandas
2个回答
2
投票

这可能有所帮助

import pandas as pd

df = pd.DataFrame([{"pet":"cat", "gender":"M"}, {"pet":"Cat", "gender":"M"}, {"pet":"dog", "gender":"F"}])

result = df[ (df.gender== "M") & (df.pet.str.lower() == "cat")]
print(result)

2
投票

我认为这是一个操作顺序问题。 &==更紧密地绑定,所以当你把它们放在同一条线上时,逻辑就会改变。在==条款周围添加parens,它应该工作。

© www.soinside.com 2019 - 2024. All rights reserved.