¿Cómo reemplazar texto en una columna de un marco de datos de Pandas?

103

Tengo una columna en mi marco de datos como este:

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

y quiero reemplazar la ,coma con un -guión. Actualmente estoy usando este método, pero no se ha cambiado nada.

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

¿Alguien puede ayudar?

UserYmY
fuente

Respuestas:

214

Utilice el strmétodo vectorizado replace:

In [30]:

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

EDITAR

Entonces, si miramos lo que intentó y por qué no funcionó:

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

de los documentos vemos esta descripción:

str o regex: str: la cadena que coincide exactamente con to_replace será reemplazada con valor

Entonces, debido a que los valores de str no coinciden, no se produce ningún reemplazo, compare con lo siguiente:

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

aquí obtenemos una coincidencia exacta en la segunda fila y se produce el reemplazo.

EdChum
fuente
40

Para cualquier otra persona que llegue aquí desde la búsqueda de Google sobre cómo hacer un reemplazo de cadena en todas las columnas (por ejemplo, si una tiene varias columnas como la columna 'rango' del OP): Pandas tiene un replacemétodo integrado disponible en un objeto de marco de datos.

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

Fuente: Docs

kevcisme
fuente
2

Reemplace todas las comas con subrayado en los nombres de las columnas

data.columns= data.columns.str.replace(' ','_',regex=True)
Rameez Ahmad
fuente
2

Además, para aquellos que buscan reemplazar más de un carácter en una columna, pueden hacerlo usando expresiones 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
fuente
0

Si solo necesita reemplazar caracteres en una columna específica, de alguna manera regex = True y en su lugar = True, todos fallaron, creo que de esta manera funcionará:

data["column_name"] = data["column_name"].apply(lambda x: x.replace("characters_need_to_replace", "new_characters"))

lambda es más como una función que funciona como un bucle for en este escenario. x aquí representa cada una de las entradas de la columna actual.

Lo único que debe hacer es cambiar "column_name", "characters_need_to_replace" y "new_characters".

Nancy K
fuente