如何在Pandas DataFrame中打印包含特定值的行

11 投票
2 回答
18209 浏览
提问于 2025-04-18 12:43

我想打印出数据表中所有包含'-'这个值的行。不知道有没有比下面提到的方法更好的方式?

这个问答已经解释了如何使用布尔索引来实现,但每一列都需要单独声明:

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

(注意,我稍微调整了一下数据框,以免搞错坐标轴。)

撰写回答