我正在测试我的数据集,并试图使用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比较的结果不会自动转换为布尔数组?
答案 0 :(得分:2)
我认为这是一个操作顺序问题。 &
的绑定比==
更紧密,因此当您将它们放在同一行时,逻辑会更改。在==
子句周围添加parens,它应该可以正常工作。
答案 1 :(得分: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)