Python TypeError:无法比较<;类型';str'&燃气轮机;带系列的类型
当我尝试使用字符串过滤数据帧时,出现以下错误Python TypeError:无法比较<;类型';str'&燃气轮机;带系列的类型,python,pandas,Python,Pandas,当我尝试使用字符串过滤数据帧时,出现以下错误 TypeError:无法将类型与系列进行比较 这是我的密码 data = pd.read_csv('data.csv') fildata = data[(data['cat1'] == 'FALSE') & (data['cat2'] != '') & (data['cat3'] == 'FALSE')] 编辑1: 下面是数据的样子 count,word,cat1,cat2,cat3 1021,.,FALSE,,FALSE 825,
TypeError:无法将类型与系列进行比较
这是我的密码
data = pd.read_csv('data.csv')
fildata = data[(data['cat1'] == 'FALSE') & (data['cat2'] != '') & (data['cat3'] == 'FALSE')]
编辑1:
下面是数据的样子
count,word,cat1,cat2,cat3
1021,.,FALSE,,FALSE
825,the,TRUE,the,FALSE
693,and,TRUE,and,FALSE
647,of,TRUE,of,FALSE
646,",",FALSE,,FALSE
435,to,TRUE,to,FALSE
353,will,TRUE,will,FALSE
297,in,TRUE,in,FALSE
274,be,TRUE,be,FALSE
编辑2:
但这为什么有效呢
data1=pd.DataFrame({'cat1':[1,2,3,4],'cat2':[2,3,1,4],'cat3':[3,1,2,4]})
fildata=data1[(data1['cat1']=1)&(data1['cat2']!=0)&(data1['cat3']=3)]
这导致了
cat1 cat2 cat3
0 1 2 3
编辑3:
我想问题出在类型上cat1'和'cat2'属于类型
'bool'
以下内容适用于我:
In [114]:
temp = """count,word,cat1,cat2,cat3
1021,.,FALSE,,FALSE
825,the,TRUE,the,FALSE
693,and,TRUE,and,FALSE
647,of,TRUE,of,FALSE
646,",",FALSE,,FALSE
435,to,TRUE,to,FALSE
353,will,TRUE,will,FALSE
297,in,TRUE,in,FALSE
274,be,TRUE,be,FALSE"""
data = pd.read_csv(io.StringIO(temp))
fildata = data[(data['cat1'] == False) & (data['cat2'].isnull() ) & (data['cat3'] == False)]
In [115]:
fildata
Out[115]:
count word cat1 cat2 cat3
0 1021 . False NaN False
4 646 , False NaN False
[2 rows x 5 columns]
您遇到的问题是字符串FALSE
/TRUE
是由read\u csv
解释的布尔数据类型:
In [112]:
data.dtypes
Out[112]:
count int64
word object
cat1 bool
cat2 object
cat3 bool
dtype: object
因此,您的比较应该针对这种类型,而不是字符串
'FALSE'
,这是一个非常小的代码,可以说很多,但您在数据['cat3']
位上缺少了一个结束。@Leigh添加了结束。
我尝试了同样的数字过滤。它起作用了。这里到底发生了什么?这在我的玩具示例中起了作用,你能发布一些代码和数据来重现问题吗?至少一个数据[]
项可能是系列
实例。你能把它们打印出来吗?或者更好的是,你知道如何使用pdb
?是的,先生。刚想出来:(…我如何与布尔类型进行比较?这是一个新问题吗?用data['cat1']='FALSE'
替换data['cat1']==FALSE
可能会有帮助。不是data['cat1']
可能会更多Pythonic@SAnand不,您不能将数组与not
进行比较这将引发ValueError
,除非您使用any
或all
来避免歧义