Maison  >  Article  >  développement back-end  >  Comment remplacer les valeurs d'espacement par NaN dans une trame de données Pandas ?

Comment remplacer les valeurs d'espacement par NaN dans une trame de données Pandas ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 10:13:27170parcourir

How do you replace whitespace values with NaN in a Pandas dataframe?

Remplacer les valeurs vides par NaN dans Pandas

Problème

Trouver des valeurs d'espaces dans une trame de données Pandas et les remplacer par NaN peut être un défi. L'objectif est de convertir une trame de données avec des valeurs de chaîne vides en une trame avec des valeurs NaN, améliorant potentiellement la gestion et l'analyse des données.

Solution

La méthode df.replace() fournit une solution élégante, permettant vous devez remplacer les valeurs basées sur des expressions régulières :

<code class="python">df.replace(r'^\s*$', np.nan, regex=True)</code>

Dans ce modèle d'expression régulière, ^ correspond au début de la chaîne, s* correspond à zéro ou plusieurs caractères d'espacement et $ correspond à la fin de la chaîne. Par conséquent, cette expression régulière vérifie les chaînes composées entièrement d'espaces ou d'une chaîne vide.

Implémentation

Application de cette solution à l'exemple de trame de données :

<code class="python">df = pd.DataFrame([
    [-0.532681, 'foo', 0],
    [1.490752, 'bar', 1],
    [-1.387326, 'foo', 2],
    [0.814772, 'baz', ' '],     
    [-0.222552, '   ', 4],
    [-1.176781,  'qux', '  '],         
], columns='A B C'.split(), index=pd.date_range('2000-01-01','2000-01-06'))

result = df.replace(r'^\s*$', np.nan, regex=True)

print(result)</code>

Cela produira le résultat souhaité :

                   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

Amélioration

Comme l'a souligné Temak, si des données valides peuvent contenir des espaces, le modèle d'expression régulière peut être modifié en r'^s $' pour correspondre uniquement aux chaînes composées entièrement d'espaces :

<code class="python">df.replace(r'^\s+$', np.nan, regex=True)</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn