Cómo encontrar qué columnas contienen cualquier valor de NaN en el dataframe de Pandas (python)

Dado un dataframe de pandas que contiene (tal vez) valores de NaN dispersos aquí y allá:

Pregunta: ¿Cómo puedo determinar qué columnas contienen valores de NaN? En particular, ¿puedo obtener una lista de los nombres de columna que contienen NaNs?

Gracias

ACTUALIZACIÓN: utilizando Pandas 0.22.0

Las versiones más recientes de Pandas tienen nuevos métodos ‘DataFrame.isna ()’ y ‘DataFrame.notna ()’

 In [71]: df Out[71]: abc 0 NaN 7.0 0 1 0.0 NaN 4 2 2.0 NaN 4 3 1.0 7.0 0 4 1.0 3.0 9 5 7.0 4.0 9 6 2.0 6.0 9 7 9.0 6.0 4 8 3.0 0.0 9 9 9.0 0.0 1 In [72]: df.isna().any() Out[72]: a True b True c False dtype: bool 

como lista de columnas:

 In [74]: df.columns[df.isna().any()].tolist() Out[74]: ['a', 'b'] 

para seleccionar esas columnas (que contienen al menos un valor de NaN ):

 In [73]: df.loc[:, df.isna().any()] Out[73]: ab 0 NaN 7.0 1 0.0 NaN 2 2.0 NaN 3 1.0 7.0 4 1.0 3.0 5 7.0 4.0 6 2.0 6.0 7 9.0 6.0 8 3.0 0.0 9 9.0 0.0 

Respuesta VIEJA:

Trate de usar isnull () :

 In [97]: df Out[97]: abc 0 NaN 7.0 0 1 0.0 NaN 4 2 2.0 NaN 4 3 1.0 7.0 0 4 1.0 3.0 9 5 7.0 4.0 9 6 2.0 6.0 9 7 9.0 6.0 4 8 3.0 0.0 9 9 9.0 0.0 1 In [98]: pd.isnull(df).sum() > 0 Out[98]: a True b True c False dtype: bool 

o como @root propuso una versión más clara:

 In [5]: df.isnull().any() Out[5]: a True b True c False dtype: bool In [7]: df.columns[df.isnull().any()].tolist() Out[7]: ['a', 'b'] 

para seleccionar un subconjunto – todas las columnas que contienen al menos un valor de NaN :

 In [31]: df.loc[:, df.isnull().any()] Out[31]: ab 0 NaN 7.0 1 0.0 NaN 2 2.0 NaN 3 1.0 7.0 4 1.0 3.0 5 7.0 4.0 6 2.0 6.0 7 9.0 6.0 8 3.0 0.0 9 9.0 0.0 

Puede usar df.isnull().sum() . Muestra todas las columnas y el total de NaN de cada entidad.

Utilizo estas tres líneas de código para imprimir los nombres de las columnas que contienen al menos un valor nulo:

 for column in dataframe: if dataframe[column].isnull().any(): print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))