python - with - seleccionar columnas de un dataframe pandas
Python Pandas ¿Cómo seleccionar filas con uno o más valores nulos de un DataFrame sin listar columnas explícitamente? (2)
Tengo un marco de datos con ~ 300K filas y ~ 40 columnas. Quiero averiguar si alguna de las filas contiene valores nulos, y poner estas filas ''nulas'' en un marco de datos separado para que pueda explorarlas fácilmente.
Puedo crear una máscara explícitamente:
mask=False
for col in df.columns: mask = mask | df[col].isnull()
dfnulls = df[mask]
O puedo hacer algo como:
df.ix[df.index[(df.T == np.nan).sum() > 1]]
¿Hay una manera más elegante de hacerlo (ubicar filas con nulos en ellas)?
[Actualizado para adaptarse a los pandas
modernos, que tiene isnull
como método de DataFrame
s ..]
Puede usar isnull
y any
para construir una serie booleana y usarla 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 pandas
mayores:]
Puede usar la función 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
llevando 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
nans = lambda df: df[df.isnull().any(axis=1)]
luego, cuando lo necesite, puede escribir:
nans(your_dataframe)