删除具有行的NA值的列 - Python

时间:2016-03-22 22:02:39

标签: python python-2.7 numpy data-cleansing

假设我有一个如下数据框,

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(一起)没有值时才有值的列。我想找到哪一列与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()

并删除匹配的计数。

有更好更有效的方法吗?

由于

1 个答案:

答案 0 :(得分:0)

不要删除行,只需选择其他没有A,B,C同时等于NaN的行。

mask = df[["A", "B", "C"]].isnull().all(axis=1)
df = df[~mask]