更新: 使用熊猫0.22.0
较新的Pandas版本具有新的方法‘Dataframe.isna()’和‘Dataframe.notna()’
In [71]: dfOut[71]: a b c0 NaN 7.0 01 0.0 NaN 42 2.0 NaN 43 1.0 7.0 04 1.0 3.0 95 7.0 4.0 96 2.0 6.0 97 9.0 6.0 48 3.0 0.0 99 9.0 0.0 1In [72]: df.isna().any()Out[72]:a Trueb Truec Falsedtype: bool
作为列列表:
In [74]: df.columns[df.isna().any()].tolist()Out[74]: ['a', 'b']
选择这些列(至少包含一个
NaN值):
In [73]: df.loc[:, df.isna().any()]Out[73]: a b0 NaN 7.01 0.0 NaN2 2.0 NaN3 1.0 7.04 1.0 3.05 7.0 4.06 2.0 6.07 9.0 6.08 3.0 0.09 9.0 0.0
旧答案:
尝试使用isnull():
In [97]: dfOut[97]: a b c0 NaN 7.0 01 0.0 NaN 42 2.0 NaN 43 1.0 7.0 04 1.0 3.0 95 7.0 4.0 96 2.0 6.0 97 9.0 6.0 48 3.0 0.0 99 9.0 0.0 1In [98]: pd.isnull(df).sum() > 0Out[98]:a Trueb Truec Falsedtype: bool
或作为@root建议的更清晰的版本:
In [5]: df.isnull().any()Out[5]:a Trueb Truec Falsedtype: boolIn [7]: df.columns[df.isnull().any()].tolist()Out[7]: ['a', 'b']
选择一个子集-所有列至少包含一个
NaN值:
In [31]: df.loc[:, df.isnull().any()]Out[31]: a b0 NaN 7.01 0.0 NaN2 2.0 NaN3 1.0 7.04 1.0 3.05 7.0 4.06 2.0 6.07 9.0 6.08 3.0 0.09 9.0 0.0



