Réponses:
MISE À JOUR: utilisation de Pandas 0.22.0
Les nouvelles versions de Pandas ont de nouvelles méthodes 'DataFrame.isna ()' et 'DataFrame.notna ()'
In [71]: df
Out[71]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [72]: df.isna().any()
Out[72]:
a True
b True
c False
dtype: bool
comme liste de colonnes:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
pour sélectionner ces colonnes (contenant au moins une NaN
valeur):
In [73]: df.loc[:, df.isna().any()]
Out[73]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
ANCIENNE réponse:
Essayez d'utiliser isnull () :
In [97]: df
Out[97]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [98]: pd.isnull(df).sum() > 0
Out[98]:
a True
b True
c False
dtype: bool
ou comme @root proposait une version plus claire:
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']
pour sélectionner un sous-ensemble - toutes les colonnes contenant au moins une NaN
valeur:
In [31]: df.loc[:, df.isnull().any()]
Out[31]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
df.columns[df.isin['xxx'].any()].tolist()
df.columns[df.eq(search_for_value).any()].tolist()
isna
, notna
?
J'ai eu un problème où je devais inspecter visuellement de nombreuses colonnes à l'écran, donc une liste courte comp qui filtre et renvoie les colonnes incriminées est
nan_cols = [i for i in df.columns if df[i].isnull().any()]
si cela est utile à quelqu'un
Dans les ensembles de données ayant un grand nombre de colonnes, il est encore mieux de voir combien de colonnes contiennent des valeurs nulles et combien n'en contiennent pas.
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))
Par exemple, dans mon dataframe, il contenait 82 colonnes, dont 19 contenaient au moins une valeur nulle.
De plus, vous pouvez également supprimer automatiquement les colonnes et les lignes en fonction de ce qui a le plus de valeurs nulles
Voici le code qui fait cela intelligemment:
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
Remarque: le code ci-dessus supprime toutes vos valeurs nulles. Si vous voulez des valeurs nulles, traitez-les avant.
Cela a fonctionné pour moi,
1. Pour obtenir des colonnes ayant au moins 1 valeur nulle. (noms des colonnes)
data.columns[data.isnull().any()]
2. Pour obtenir des colonnes avec nombre, avec au moins 1 valeur nulle.
data[data.columns[data.isnull().any()]].isnull().sum()
[Facultatif] 3. Pour obtenir le pourcentage du nombre nul.
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
df.isna().any()[lambda x: x]
travaille pour moi