根据值(Pandas)过滤列:TypeError:无法将['a']与块值进行比较

时间:2016-11-09 20:25:57

标签: python-3.x pandas

我正在尝试根据值过滤DataFrame列。

In[41]: df = pd.DataFrame({'A':['a',2,3,4,5], 'B':[6,7,8,9,10]})
In[42]: df
Out[42]: 
   A   B
0  a   6
1  2   7
2  3   8
3  4   9
4  5  10

过滤列:

In[43]: df.loc[:, (df != 6).iloc[0]]
Out[43]: 
   A
0  a
1  2
2  3
3  4
4  5

有效!但是,当我使用字符串时,

In[44]: df.loc[:, (df != 'a').iloc[0]]

我收到此错误:TypeError: Could not compare ['a'] with block values

3 个答案:

答案 0 :(得分:1)

您正在尝试比较字符串' a'使用B列中的数值。

如果你想让你的代码工作,首先将列B的dtype提升为numpy.object,它会起作用。

df.B = df.B.astype(np.object)

在使用

执行操作之前,请务必检查列的数据类型
df.info()

答案 1 :(得分:0)

您可以使用蒙版来完成此操作,例如:

df[df.A!='a'].A

并从任何列过滤:

df[df.apply(lambda x: sum([x_=='a' for x_ in x])==0, axis=1)]

答案 2 :(得分:0)

问题是由于数据框中有数字和字符串对象。 您可以遍历每一列,并使用

将每列作为特定值的系列进行检查

(系列=='一个&#39)。任何()