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)
谢谢你的建议.
或者,你可以做类似的事情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)
(注意我稍微改变了框架,所以我不会弄错轴。)
你可以做:
>>> 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
| 归档时间: |
|
| 查看次数: |
5333 次 |
| 最近记录: |