Kie*_*nPC 6 python dataframe pandas
我想打印数据帧的所有行,我在任何列中找到值' - '.有人可以解释一下比下面描述的更好的方法吗?
此问答已经通过使用布尔索引解释了如何执行此操作,但每个列都需要单独声明:
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]
谢谢你的建议.
或者,你可以做类似的事情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
(注意我稍微改变了框架,所以我不会弄错轴。)
你可以做:
>>> 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