【发布时间】:2016-07-10 00:45:33
【问题描述】:
假设我有一个如下的数据框,
import pandas as pd
columns=['A','B','C','D', 'E', 'F']
index=['1','2','3','4','5','6']
df = pd.DataFrame(columns=columns,index=index)
df['D']['1'] = 1
df['E'] = 1
df['F']['1'] = 1
df['A']['2'] = 1
df['B']['3'] = 1
df['C']['4'] = 1
df['A']['5'] = 1
df['B']['5'] = 1
df['C']['5'] = 1
df['D']['6'] = 1
df['F']['6'] = 1
df
A B C D E F
1 NaN NaN NaN 1 1 1
2 1 NaN NaN NaN 1 NaN
3 NaN 1 NaN NaN 1 NaN
4 NaN NaN 1 NaN 1 NaN
5 1 1 1 NaN 1 NaN
6 NaN NaN NaN 1 1 1
我的条件是,我想删除仅当 A、B、C(together) 没有值时才具有值的列。我想找出哪一列与 A、B、C 列相互排斥。我有兴趣找到仅当 A 或 B 或 C 具有值时才具有值的列。这里的输出将是删除 D、F 列。但是我的数据框有 400 列,我想要一种方法来检查 A、B、C 与其余列的对比。
我能想到的一种方法是,
从 A,B,C 中删除 NA 行
df = df[np.isfinite(df['A'])]
df = df[np.isfinite(df['B'])]
df = df[np.isfinite(df['C'])]
并获取所有列的 NA 计数并检查总行数,
df.isnull().sum()
并删除匹配的计数。
有没有更好更有效的方法来做到这一点?
谢谢
【问题讨论】:
标签: python python-2.7 numpy data-cleaning