如何在Pandas DataFrame中打印包含特定值的行
我想打印出数据表中所有包含'-'这个值的行。不知道有没有比下面提到的方法更好的方式?
这个问答已经解释了如何使用布尔索引来实现,但每一列都需要单独声明:
print df.ix[df['A'].isin(['-']) | df['B'].isin(['-']) | df['C'].isin(['-'])]
我试过以下代码,但出现了一个错误,提示'无法用多维键进行索引':
df.ix[df[df.columns.values].isin(['-'])]
所以我用了这段代码,但我对每一列单独打印的方式不太满意,因为这样处理起来比较麻烦,而且可能会重复打印同一行:
import pandas as pd
d = {'A': [1,2,3], 'B': [4,'-',6], 'C': [7,8,'-']}
df = pd.DataFrame(d)
for i in range(len(d.keys())):
temp = df.ix[df.iloc[:,i].isin(['-'])]
if temp.shape[0] > 0:
print temp
输出结果是这样的:
A B C
1 2 - 8
[1 rows x 3 columns]
A B C
2 3 6 -
[1 rows x 3 columns]
谢谢你的建议。
2 个回答
5
你可以这样做:
>>> idx = df.apply(lambda ts: any(ts == '-'), axis=1)
>>> df[idx]
A B C
1 2 - 8
2 3 6 -
或者
lambda ts: '-' in ts.values
注意,in
是查看索引而不是查看值,所以你需要用 .values
8
另外,你可以这样做:df[df.isin(["-"]).any(axis=1)]
,比如说:
>>> df = pd.DataFrame({'A': [1,2,3], 'B': ['-','-',6], 'C': [7,8,9]})
>>> df.isin(["-"]).any(axis=1)
0 True
1 True
2 False
dtype: bool
>>> df[df.isin(["-"]).any(axis=1)]
A B C
0 1 - 7
1 2 - 8
(注意,我稍微调整了一下数据框,以免搞错坐标轴。)