Comment remplacer du texte dans une colonne d'un dataframe Pandas?

96

J'ai une colonne dans mon dataframe comme ceci:

range
"(2,30)"
"(50,290)"
"(400,1000)"
... 

et je veux remplacer la ,virgule par un -tiret. J'utilise actuellement cette méthode mais rien n'est changé.

org_info_exc['range'].replace(',', '-', inplace=True)

Quelqu'un peut-il aider?

UserYmY
la source

Réponses:

194

Utilisez la strméthode vectorisée replace:

In [30]:

df['range'] = df['range'].str.replace(',','-')
df
Out[30]:
      range
0    (2-30)
1  (50-290)

ÉDITER

Donc, si nous regardons ce que vous avez essayé et pourquoi cela n'a pas fonctionné:

df['range'].replace(',','-',inplace=True)

à partir des documents, nous voyons cette description:

str ou regex: str: la chaîne correspondant exactement à to_replace sera remplacée par value

Ainsi, comme les valeurs str ne correspondent pas, aucun remplacement ne se produit, comparez avec ce qui suit:

In [43]:

df = pd.DataFrame({'range':['(2,30)',',']})
df['range'].replace(',','-', inplace=True)
df['range']
Out[43]:
0    (2,30)
1         -
Name: range, dtype: object

ici, nous obtenons une correspondance exacte sur la deuxième ligne et le remplacement se produit.

EdChum
la source
33

Pour toute autre personne arrivant ici de la recherche Google sur la façon de faire un remplacement de chaîne sur toutes les colonnes (par exemple, si l'on a plusieurs colonnes comme la colonne `` plage '' de l'OP): Pandas a une replaceméthode intégrée disponible sur un objet dataframe.

df.replace(',', '-', regex=True)

Source: Docs

kevcisme
la source
2

Remplacez toutes les virgules par un trait de soulignement dans les noms de colonne

data.columns= data.columns.str.replace(' ','_',regex=True)
Rameez Ahmad
la source
0

De plus, pour ceux qui cherchent à remplacer plus d'un caractère dans une colonne, vous pouvez le faire à l'aide d'expressions régulières:

import re
chars_to_remove = ['.', '-', '(', ')', '']
regular_expression = '[' + re.escape (''. join (chars_to_remove)) + ']'

df['string_col'].str.replace(regular_expression, '', regex=True)
Carlos Dutra
la source