[Atualizado para se adaptar ao moderno pandas
, que tem isnull
como método de DataFrame
s ..]
Você pode usar isnull
e any
criar uma série booleana e usá-la para indexar em seu quadro:
>>> 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 idosos pandas
:]
Você poderia usar a função em isnull
vez do 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
levando ao 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 mas jogaUserWarning: Boolean Series key will be reindexed to match DataFrame index.
. Como alguém reescreve isso de forma mais explícita e de uma maneira que não aciona essa mensagem de aviso?df.loc[df.isnull().any(axis=1)]
.any()
e.all()
são ótimos para casos extremos, mas não quando você procura um número específico de valores nulos. Aqui está uma maneira extremamente simples de fazer o que acredito que você está pedindo. É bem detalhado, mas funcional.Resultado
Então, se você é como eu e deseja limpar essas linhas, basta escrever o seguinte:
Resultado:
fonte