[Mis à jour pour s'adapter au moderne pandas
, qui a isnull
comme méthode deDataFrame
s ..]
Vous pouvez utiliser isnull
et any
pour construire une série booléenne et l'utiliser pour indexer dans votre cadre:
>>> 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
[Pour les plus âgés pandas
:]
Vous pouvez utiliser la fonction isnull
au lieu de la méthode:
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
conduisant au plutôt compact:
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)]
fonctionne mais jetteUserWarning: Boolean Series key will be reindexed to match DataFrame index.
. Comment peut-on réécrire cela de manière plus explicite et d'une manière qui ne déclenche pas ce message d'avertissement?df.loc[df.isnull().any(axis=1)]
.any()
et.all()
sont parfaits pour les cas extrêmes, mais pas lorsque vous recherchez un nombre spécifique de valeurs nulles. Voici un moyen extrêmement simple de faire ce que je crois que vous demandez. C'est assez verbeux, mais fonctionnel.Production
Ensuite, si vous êtes comme moi et que vous souhaitez effacer ces lignes, écrivez simplement ceci:
Production:
la source