In[71]: df
Out[71]:
a b c
0NaN7.0010.0NaN422.0NaN431.07.0041.03.0957.04.0962.06.0979.06.0483.00.0999.00.01In[72]: df.isna().any()Out[72]:
a True
b True
c False
dtype: bool
In[97]: df
Out[97]:
a b c
0NaN7.0010.0NaN422.0NaN431.07.0041.03.0957.04.0962.06.0979.06.0483.00.0999.00.01In[98]: pd.isnull(df).sum()>0Out[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 NaNvalor:
In[31]: df.loc[:, df.isnull().any()]Out[31]:
a b
0NaN7.010.0NaN22.0NaN31.07.041.03.057.04.062.06.079.06.083.00.099.00.0
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
nan_cols =[i for i in df.columns if df[i].isnull().any()]
En los conjuntos de datos que tienen una gran cantidad de columnas, es aún mejor ver cuántas columnas contienen valores nulos y cuántas no.
print("No. of columns containing null values")print(len(df.columns[df.isna().any()]))print("No. of columns not containing null values")print(len(df.columns[df.notna().all()]))print("Total no. of columns in the dataframe")print(len(df.columns))
Por ejemplo, en mi marco de datos contenía 82 columnas, de las cuales 19 contenían al menos un valor nulo.
Además, también puede eliminar automáticamente columnas y filas según cuál tenga valores más nulos.
Aquí está el código que hace esto de manera inteligente:
df.isna().any()[lambda x: x]
funciona para míRespuestas:
ACTUALIZACIÓN: usando Pandas 0.22.0
Las versiones más recientes de Pandas tienen nuevos métodos 'DataFrame.isna ()' y 'DataFrame.notna ()'
como lista de columnas:
para seleccionar esas columnas (que contienen al menos un
NaN
valor):ANTIGUA respuesta:
Intenta usar isnull () :
o como @root propuso una versión más clara:
para seleccionar un subconjunto: todas las columnas que contienen al menos un
NaN
valor:fuente
df.columns[df.isin['xxx'].any()].tolist()
df.columns[df.eq(search_for_value).any()].tolist()
isna
,notna
?Puedes usar
df.isnull().sum()
. Muestra todas las columnas y los NaN totales de cada característica.fuente
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
si eso es útil para alguien
fuente
En los conjuntos de datos que tienen una gran cantidad de columnas, es aún mejor ver cuántas columnas contienen valores nulos y cuántas no.
Por ejemplo, en mi marco de datos contenía 82 columnas, de las cuales 19 contenían al menos un valor nulo.
Además, también puede eliminar automáticamente columnas y filas según cuál tenga valores más nulos.
Aquí está el código que hace esto de manera inteligente:
Nota: el código anterior elimina todos sus valores nulos. Si desea valores nulos, procéselos antes.
fuente
Utilizo estas tres líneas de código para imprimir los nombres de columna que contienen al menos un valor nulo:
fuente
Ambos deberían funcionar:
Los métodos DataFrame
isna()
oisnull()
son completamente idénticos.Nota : Las cadenas vacías
''
se consideran falsas (no se consideran NA)fuente
Esto funcionó para mí
1. Para obtener columnas que tengan al menos 1 valor nulo. (nombres de columna)
2. Para obtener columnas con conteo, con al menos 1 valor nulo.
[Opcional] 3. Para obtener el porcentaje del recuento nulo.
fuente