una tablas para leer funciones filtrar datos columna añadir agregar python pandas numpy dataframe nan

tablas - Cómo encontrar qué columnas contienen cualquier valor de NaN en el marco de datos de Pandas(python)



filtrar datos pandas (5)

Ambos deberían funcionar:

nan_cols = [i for i in df.columns if df[i].isnull().any()]

Los métodos isna() o isnull() son completamente idénticos.

Nota : Cadenas vacías '''' se considera falso (no se considera NA)

Dado un marco de datos de pandas que contiene posibles valores de NaN dispersos aquí y allá:

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


Puede usar df.isnull().sum() . Muestra todas las columnas y los NaN totales de cada característica.


Tuve un problema en el que tenía que inspeccionar visualmente muchas columnas en la pantalla, por lo que una breve lista de compilación que filtra y devuelve las columnas ofensivas es

df.isnull().sum() df.isna().sum()

si eso es útil para alguien


Utilizo estas tres líneas de código para imprimir los nombres de columna 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()))


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]: a b c 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 NaN ):

In [73]: df.loc[:, df.isna().any()] Out[73]: a b 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

ANTIGUA respuesta:

Intenta usar isnull() :

In [97]: df Out[97]: a b c 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 NaN :

In [31]: df.loc[:, df.isnull().any()] Out[31]: a b 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