【问题标题】:TypeError: Could not compare <type 'str'> type with SeriesTypeError:无法将 <type 'str'> 类型与 Series 进行比较
【发布时间】:2014-04-10 10:52:10
【问题描述】:

当我尝试使用字符串过滤数据框时出现以下错误

TypeError: Could not compare &lt;type 'str'&gt; type with Series

这是我的代码;

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) &amp; (data1['cat2'] != 0) &amp; (data1['cat3']== 3)]

这会导致;

cat1 cat2 cat3 0 1 2 3

编辑 3:

我想问题出在类型上。 'cat1' & 'cat2' 的类型为 'bool'

【问题讨论】:

  • 这是非常少的代码,但您在 data['cat3'] 位上缺少一个结束 '
  • @Leigh 添加了结尾'
  • 我尝试过使用数字进行相同的过滤。有用。这里到底发生了什么?
  • 这适用于我的玩具示例,您能否发布一些重现问题的代码和数据
  • 至少有一个data[] 项可能是Series 实例。你能打印出来吗,或者更好的是,你知道如何使用pdb吗?

标签: python pandas


【解决方案1】:

以下内容对我有用:

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/TRUEread_csv 解释的布尔数据类型:

In [112]:

data.dtypes
Out[112]:
count     int64
word     object
cat1       bool
cat2     object
cat3       bool
dtype: object

所以你的比较应该针对这种类型,而不是字符串'FALSE'

【讨论】:

  • 是的,先生。刚刚想通了 :( .. 我如何与布尔类型进行比较?这应该是一个新问题吗?
  • data['cat1'] == False 替换data['cat1'] == 'FALSE' 可能会有所帮助。 not data['cat1'] 可能更 Pythonic
  • @SAnand 不,您不能将数组与not 进行比较,这将引发ValueError,除非您使用anyall 来避免歧义
猜你喜欢
  • 2020-08-15
  • 1970-01-01
  • 2020-08-13
  • 2018-12-30
  • 2023-03-27
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多