在pandas中,如何从DataFrame中删除不包含至少一个NaN的所有列?

时间:2017-05-03 16:21:03

标签: pandas dataframe nan

我有一个DataFrame,其中一些列有NaN个值。我想删除所有没有至少一个NaN值的列。

我可以通过创建填充了布尔值的数据框来识别NaN值(True代替NaN值,否则为False

data.isnull()

然后,我可以通过创建一系列具有关联布尔值的列名来识别包含至少一个NaN值的列(True,如果该列包含至少一个{{1} }},否则为NaN

False

当我尝试使用此系列删除不包含至少一个data.isnull().any(axis = 0) 值的列时,我遇到了一个问题:不包含NaN值的列将被删除:< / p>

NaN

我该怎么做?

2 个答案:

答案 0 :(得分:1)

考虑数据框df

df = pd.DataFrame([
        [1, 2, None],
        [3, None, 4],
        [5, 6, None]
    ], columns=list('ABC'))

df

   A    B    C
0  1  2.0  NaN
1  3  NaN  4.0
2  5  6.0  NaN

IIUC:

<强> pandas
带有dropna参数

thresh
df.dropna(1, thresh=2)

   A    B
0  1  2.0
1  3  NaN
2  5  6.0

loc +布尔索引

df.loc[:, df.isnull().sum() < 2]

   A    B
0  1  2.0
1  3  NaN
2  5  6.0

答案 1 :(得分:0)

我使用@ piRSquared答案的样本DF。

如果你想要"to drop the columns that do not contain at least one NaN value"

In [19]: df
Out[19]:
   A    B    C
0  1  2.0  NaN
1  3  NaN  4.0
2  5  6.0  NaN

In [26]: df.loc[:, df.isnull().any()]
Out[26]:
     B    C
0  2.0  NaN
1  NaN  4.0
2  6.0  NaN