Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么StringMethods比较的结果不会自动转换为布尔数组?_Python_Pandas - Fatal编程技术网

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

Python 为什么StringMethods比较的结果不会自动转换为布尔数组?,python,pandas,Python,Pandas,我正在测试我的数据集,并试图使用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

我正在测试我的数据集,并试图使用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比较的结果不能自动转换为布尔数组?

我认为这是一个操作顺序问题<代码>&的绑定比
=
更紧密,因此当您将它们放在同一行时,逻辑会发生变化。在
==
子句周围添加paren,它应该会起作用。

我认为这是一个操作顺序问题<代码>&的绑定比
=
更紧密,因此当您将它们放在同一行时,逻辑会发生变化。在
==
子句周围添加paren,它应该会起作用。

这可能会有所帮助

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)
这可能会有帮助

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)

注意操作顺序。注意操作顺序。