¿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?

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.


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


2

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

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

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)

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".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.