如果值出现在pandas dataframe的任何列中,如何打印行

Kie*_*nPC 6 python dataframe pandas

我想打印数据帧的所有行,我在任何列中找到值' - '.有人可以解释一下比下面描述的更好的方法吗?

此问答已经通过使用布尔索引解释了如何执行此操作,但每个列都需要单独声明:

print df.ix[df['A'].isin(['-']) | df['B'].isin(['-']) | df['C'].isin(['-'])]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但是我收到错误'无法使用多维键索引':

df.ix[df[df.columns.values].isin(['-'])]
Run Code Online (Sandbox Code Playgroud)

所以我使用了这段代码,但是我对每个测试列的单独打印都不满意,因为它更难处理并且可以多次打印同一行:

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
Run Code Online (Sandbox Code Playgroud)

输出如下:

   A  B  C
1  2  -  8

[1 rows x 3 columns]

   A  B  C
2  3  6  -

[1 rows x 3 columns]
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议.

DSM*_*DSM 7

或者,你可以做类似的事情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
Run Code Online (Sandbox Code Playgroud)

(注意我稍微改变了框架,所以我不会弄错轴。)


beh*_*uri 5

你可以做:

>>> idx = df.apply(lambda ts: any(ts == '-'), axis=1)
>>> df[idx]
   A  B  C
1  2  -  8
2  3  6  -
Run Code Online (Sandbox Code Playgroud)

或者

lambda ts: '-' in ts.values
Run Code Online (Sandbox Code Playgroud)

请注意,in查看索引而不是值,因此您需要.values