Je veux trouver toutes les valeurs dans un dataframe Pandas qui contiennent des espaces (n'importe quel montant arbitraire) et remplacer ces valeurs par NaNs.
Des idées sur la façon dont cela peut être amélioré?
Fondamentalement, je veux tourner ceci:
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 ceci:
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 moche. Ce n'est pas Pythonic et je suis sûr que ce n'est pas non plus l'utilisation la plus efficace des pandas. Je boucle sur chaque colonne et effectue un remplacement booléen par rapport à un masque de colonne généré en appliquant une fonction qui effectue une recherche regex de chaque valeur, correspondant sur un espace blanc.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Il pourrait être optimisé un peu en itérant uniquement dans les champs qui pourraient contenir des chaînes vides:
if df[i].dtype == np.dtype('object')
Mais ce n'est pas vraiment une amélioration
Et enfin, ce code définit les chaînes cibles sur None, ce qui fonctionne avec les fonctions de Pandas comme fillna()
, mais ce serait bien pour l'exhaustivité si je pouvais réellement insérer un NaN
directement au lieu de None
.
replace
avec une regex ... (peut-être que cela devrait être demandé en tant que fonctionnalité).