Avec une base de données de pandas contenant (peut-être) des valeurs de NaN dispersées ici et là:
Question: comment puis-je déterminer quelles colonnes contiennent des valeurs NaN? En particulier, puis-je obtenir une liste des noms de colonnes contenant des NaN?
Je vous remercie
UPDATE: en utilisant 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
sous forme de liste de colonnes:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
pour sélectionner ces colonnes (contenant au moins une valeur NaN
):
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 a proposé 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 valeur NaN
:
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
Vous pouvez utiliser df.isnull().sum()
. Il affiche toutes les colonnes et le total NaN de chaque entité.
J'ai eu un problème où je devais avoir plusieurs colonnes à inspecter visuellement à l'écran, donc une liste restreinte qui filtre et renvoie les colonnes incriminées est
nan_cols = [i for i in df.columns if df[i].isnull().any()]
si cela peut aider quelqu'un
Les deux devraient fonctionner:
df.isnull().sum()
df.isna().sum()
Les méthodes DataFrame isna()
ou isnull()
sont complètement identiques.
Remarque : Les chaînes vides ''
est considéré comme étant False (non considéré comme NA)
j'utilise ces trois lignes de code pour imprimer les noms de colonnes qui contiennent au moins une valeur NULL:
for column in dataframe:
if dataframe[column].isnull().any():
print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))