web-dev-qa-db-fra.com

Pandas Remplacer NaN par une chaîne vide / vide

J'ai un Pandas Dataframe comme indiqué ci-dessous:

    1    2       3
 0  a  NaN    read
 1  b    l  unread
 2  c  NaN    read

Je veux supprimer les valeurs NaN avec une chaîne vide afin qu'il ressemble à ceci:

    1    2       3
 0  a   ""    read
 1  b    l  unread
 2  c   ""    read
156
user1452759
import numpy as np
df1 = df.replace(np.nan, '', regex=True)

Cela pourrait aider. Il remplacera tous les NaN par une chaîne vide.

182
nEO

Un peu plus court est:

df = df.fillna('')

ou juste

df.fillna('',inplace=True)

Cela remplira les na (ex. NaN) avec ''.

Si vous souhaitez remplir une seule colonne, vous pouvez utiliser:

df[column1] = df.column1.fillna('')
255
fantabolous

Si vous lisez le cadre de données à partir d'un fichier (par exemple, CSV ou Excel), utilisez:

  1. df.read_csv(path , na_filter=False)
  2. df.read_Excel(path , na_filter=False)

Cela considérera automatiquement les champs vides comme des chaînes vides ''


Si vous avez déjà le Dataframe

  • df = df.replace(np.nan, '', regex=True)
  • df = df.fillna('')
79
Natesh bhat

tilisez un formateur, si vous voulez seulement le formater pour qu’il soit bien rendu à l’impression. Utilisez simplement le df.to_string(... formatters pour définir le formatage de chaîne personnalisé, sans modifier inutilement votre DataFrame ni gaspiller de la mémoire:

df = pd.DataFrame({
    'A': ['a', 'b', 'c'],
    'B': [np.nan, 1, np.nan],
    'C': ['read', 'unread', 'read']})
print df.to_string(
    formatters={'B': lambda x: '' if pd.isnull(x) else '{:.0f}'.format(x)})

Obtenir:

   A B       C
0  a      read
1  b 1  unread
2  c      read
3
Steve Schulist

utiliser keep_default_na=False devrait vous aider à:

df = pd.read_csv(filename, keep_default_na=False)
0
Bendy Latortue

J'ai essayé avec une colonne de valeurs de chaîne avec nan.

Pour supprimer le nan et remplir la chaîne vide:

df.columnname.replace(np.nan,'',regex = True)

Pour supprimer le nan et remplir quelques valeurs:

df.columnname.replace(np.nan,'value',regex = True)

J'ai essayé df.iloc aussi. mais il faut l'index de la colonne. vous devez donc regarder à nouveau dans la table. simplement la méthode ci-dessus réduite d'un pas.

0
Vidya Sekar

Essaye ça,

ajouter inplace=True

import numpy as np
df.replace(np.NaN, ' ', inplace=True)
0
Vineesh TP

Si vous convertissez DataFrame en JSON, NaN donnera une erreur, la meilleure solution est donc de remplacer NaN par None.
Voici comment:

df1 = df.where((pd.notnull(df)), None)
0
Dinesh Khetarpal