Maison >développement back-end >Tutoriel Python >Comment remplacer les chaînes vides (espaces) par NaN dans un DataFrame Pandas ?

Comment remplacer les chaînes vides (espaces) par NaN dans un DataFrame Pandas ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 04:18:30701parcourir

How to Replace Empty Strings (Whitespace) with NaN in a Pandas DataFrame?

Remplacer les valeurs vides (espaces blancs) par NaN dans Pandas

Comment pouvez-vous remplacer efficacement les valeurs vides (espaces blancs) par NaN dans un Pandas dataframe ?

Approche initiale :

Le code suivant est capable de remplacer les valeurs vides par None, mais il est inefficace et n'est pas la solution la plus pythonique :

<code class="python">for i in df.columns:
    df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)] = None</code>

Solution optimale :

Pandas propose une solution plus concise et efficace grâce à la méthode df.replace() :

<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'))

# replace field that's entirely space (or empty) with NaN
print(df.replace(r'^\s*$', np.nan, regex=True))</code>

Ce code remplace le blanc valeurs (expressions régulières : ^s*$) avec NaN, produisant 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

Remarque :

Si vous devez gérer des données valides qui peuvent contiennent des espaces blancs, vous pouvez modifier l'expression régulière en r'^s $', qui correspond uniquement aux champs constitués entièrement d'espaces blancs.

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