Je veux trouver toutes les valeurs dans un cadre de données Pandas qui contiennent des espaces (n'importe quelle quantité arbitraire) et remplacer ces valeurs par des NaN.
Avez-vous des idées sur la façon d'améliorer cette situation ?
En gros, je veux tourner ça :
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
Dans ça :
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
J'ai réussi à le faire avec le code ci-dessous, mais c'est vraiment moche. Ce n'est pas Python et je suis sûr que ce n'est pas non plus l'utilisation la plus efficace de pandas. Je boucle à travers chaque colonne et je fais un remplacement booléen par rapport à un masque de colonne généré en appliquant une fonction qui fait une recherche regex de chaque valeur, avec correspondance sur les espaces.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
On pourrait l'optimiser un peu en n'itérant que sur les champs qui peuvent contenir des chaînes vides :
if df[i].dtype == np.dtype('object')
Mais ce n'est pas une grande amélioration
Et enfin, ce code définit les chaînes cibles à None, ce qui fonctionne avec les fonctions de Pandas telles que fillna()
mais ce serait bien, par souci d'exhaustivité, de pouvoir insérer un fichier NaN
directement au lieu de None
.