我正在尝试根据值过滤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
答案 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)。任何()