Como substituir o texto em uma coluna de um dataframe Pandas?


96

Eu tenho uma coluna em meu dataframe como esta:

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

e desejo substituir a ,vírgula por -travessão. Atualmente, estou usando este método, mas nada foi alterado.

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

Alguém pode ajudar?

Respostas:


194

Use o strmétodo vetorizado replace:

In [30]:

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

EDITAR

Então, se olharmos o que você tentou e por que não funcionou:

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

nos documentos , vemos este desc:

str ou regex: str: string que corresponde exatamente a to_replace será substituído por valor

Portanto, como os valores str não correspondem, nenhuma substituição ocorre, compare com o seguinte:

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

aqui obtemos uma correspondência exata na segunda linha e a substituição ocorre.


33

Para qualquer outra pessoa que chegue aqui da pesquisa do Google sobre como fazer uma substituição de string em todas as colunas (por exemplo, se houver várias colunas como a coluna 'intervalo' do OP): Pandas tem um replacemétodo embutido disponível em um objeto dataframe.

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

Fonte: Docs


2

Substitua todas as vírgulas por sublinhado nos nomes das colunas

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

0

Além disso, para aqueles que desejam substituir mais de um caractere em uma coluna, você pode fazer isso usando expressões regulares:

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

df['string_col'].str.replace(regular_expression, '', regex=True)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.