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?

UserYmY
fonte

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.

EdChum
fonte
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

kevcisme
fonte
2

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

data.columns= data.columns.str.replace(' ','_',regex=True)
Rameez Ahmad
fonte
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)
Carlos Dutra
fonte