J'essaie de chercher dans un Pandas Dataframe pour trouver où il a une entrée manquante ou une entrée NaN.
Voici une base de données avec laquelle je travaille:
cl_id a c d e A1 A2 A3
0 1 -0.419279 0.843832 -0.530827 text76 1.537177 -0.271042
1 2 0.581566 2.257544 0.440485 dafN_6 0.144228 2.362259
2 3 -1.259333 1.074986 1.834653 system 1.100353
3 4 -1.279785 0.272977 0.197011 Fifty -0.031721 1.434273
4 5 0.578348 0.595515 0.553483 channel 0.640708 0.649132
5 6 -1.549588 -0.198588 0.373476 audio -0.508501
6 7 0.172863 1.874987 1.405923 Twenty NaN NaN
7 8 -0.149630 -0.502117 0.315323 file_max NaN NaN
REMARQUE: les entrées vides sont des chaînes vides, car le fichier ne contenait aucun contenu alphanumérique d'origine.
Si j'ai cette base de données, comment puis-je trouver une liste avec les index où l'entrée NaN ou l'entrée vide se produit?
np.where(pd.isnull(df))
renvoie les index de ligne et de colonne dont la valeur est NaN:
In [152]: import numpy as np
In [153]: import pandas as pd
In [154]: np.where(pd.isnull(df))
Out[154]: (array([2, 5, 6, 6, 7, 7]), array([7, 7, 6, 7, 6, 7]))
In [155]: df.iloc[2,7]
Out[155]: nan
In [160]: [df.iloc[i,j] for i,j in Zip(*np.where(pd.isnull(df)))]
Out[160]: [nan, nan, nan, nan, nan, nan]
Il est possible de rechercher des valeurs qui sont des chaînes vides avec applymap:
In [182]: np.where(df.applymap(lambda x: x == ''))
Out[182]: (array([5]), array([7]))
Notez que l'utilisation de applymap
nécessite d'appeler une fonction Python une fois pour chaque cellule du DataFrame. Cela pourrait être lent pour un DataFrame volumineux, il serait donc préférable que vous disposiez à la place de NaN dans toutes les cellules vierges pour pouvoir utiliser pd.isnull
.
Essaye ça:
df[df['column_name'] == ''].index
et pour NaN, vous pouvez essayer:
pd.isna(df['column_name'])
Solution partielle: pour une colonne de chaîne unique tmp = df['A1'].fillna(''); isEmpty = tmp==''
donne une série booléenne de True où il y a des chaînes vides ou des valeurs NaN.