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?

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.


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


2

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

data.columns= data.columns.str.replace(' ','_',regex=True)

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.