[Actualizado para adaptarse a lo moderno pandas
, que tiene isnull
como método deDataFrame
s ..]
Puede usar isnull
y any
para construir una Serie booleana y usar eso para indexar en su marco:
>>> df = pd.DataFrame([range(3), [0, np.NaN, 0], [0, 0, np.NaN], range(3), range(3)])
>>> df.isnull()
0 1 2
0 False False False
1 False True False
2 False False True
3 False False False
4 False False False
>>> df.isnull().any(axis=1)
0 False
1 True
2 True
3 False
4 False
dtype: bool
>>> df[df.isnull().any(axis=1)]
0 1 2
1 0 NaN 0
2 0 0 NaN
[Para mayores pandas
:]
Puede usar la función en isnull
lugar del método:
In [56]: df = pd.DataFrame([range(3), [0, np.NaN, 0], [0, 0, np.NaN], range(3), range(3)])
In [57]: df
Out[57]:
0 1 2
0 0 1 2
1 0 NaN 0
2 0 0 NaN
3 0 1 2
4 0 1 2
In [58]: pd.isnull(df)
Out[58]:
0 1 2
0 False False False
1 False True False
2 False False True
3 False False False
4 False False False
In [59]: pd.isnull(df).any(axis=1)
Out[59]:
0 False
1 True
2 True
3 False
4 False
que conduce a lo bastante compacto:
In [60]: df[pd.isnull(df).any(axis=1)]
Out[60]:
0 1 2
1 0 NaN 0
2 0 0 NaN
df[df.isnull().any(axis=1)]
funciona pero tiraUserWarning: Boolean Series key will be reindexed to match DataFrame index.
. ¿Cómo se reescribe esto más explícitamente y de una manera que no active ese mensaje de advertencia?df.loc[df.isnull().any(axis=1)]
.any()
y.all()
son excelentes para los casos extremos, pero no cuando buscas un número específico de valores nulos. Aquí hay una manera extremadamente simple de hacer lo que creo que estás pidiendo. Es bastante detallado, pero funcional.Salida
Entonces, si eres como yo y quieres borrar esas filas, solo escribe esto:
Salida:
fuente