J'ai une trame de données pandas qui a quelques observations avec des chaînes vides que je veux remplacer par NaN (np.nan).

Je remplace avec succès la plupart de ces chaînes vides en utilisant

df.replace(r'\s+',np.nan,regex=True).replace('',np.nan)

Mais je trouve toujours des chaînes vides. Par exemple, quand je cours

sub_df = df[df['OBJECT_COL'] == '']
sub_df.replace(r'\s+', np.nan, regex = True)
print(sub_df['OBJECT_COL'] == '') 

La sortie renvoie tous True

Existe-t-il une méthode différente que je devrais essayer? Existe-t-il un moyen de lire l'encodage de ces cellules de telle sorte que mon .replace() n'est peut-être pas efficace car l'encodage est bizarre?

3
Kevin Hansen 27 janv. 2019 à 20:01

2 réponses

pd.Series.replace ne fonctionne pas sur place par défaut. Vous devez spécifier explicitement inplace=True:

sub_df.replace(r'\s+', np.nan, regex=True, inplace=True)

Ou bien, réattribuez à sub_df:

sub_df = sub_df.replace(r'\s+', np.nan, regex=True)
2
jpp 27 janv. 2019 à 17:03

Essayez np.where:

df['OBJECT_COL'] = np.where(df['OBJECT_COL'] == '', np.nan, df['OBJECT_COL'])
0
Mohit Motwani 27 janv. 2019 à 17:03