Tengo un marco de datos que contiene columnas llamadas id, country_name, location y total_deaths. Mientras hacía el proceso de limpieza de datos, me encontré con un valor en una fila que tiene '\r' adjunto. Una vez que complete el proceso de limpieza, almaceno el marco de datos resultante en el archivo destination.csv. Como la fila particular anterior tiene \r adjunta, siempre crea una nueva fila.

id                               29
location            Uttar Pradesh\r
country_name                  India
total_deaths                     20

Quiero eliminar \r. Intenté df.replace({'\r': ''}, regex=True). No me esta funcionando.

Hay alguna otra solucion. Alguien puede ayudar?

Editar:

En el proceso anterior, estoy iterando sobre df para ver si \r está presente. Si está presente, entonces necesita reemplazar. Aquí row.replace() o row.str.strip() no parecen estar funcionando o podría estar haciéndolo de manera incorrecta.

No quiero especificar el nombre de la columna o el número de fila mientras uso replace(). Porque no puedo estar seguro de que solo la columna 'ubicación' tendrá \r. Por favor encuentre el código a continuación.

count = 0
for row_index, row in df.iterrows():
    if re.search(r"\\r", str(row)):
        print type(row)               #Return type is pandas.Series
        row.replace({r'\\r': ''} , regex=True)
        print row
        count += 1
7
Saranya Krishnamurthy 11 may. 2016 a las 14:13

3 respuestas

La mejor respuesta

Otra solución es usar str.strip:

df['29'] = df['29'].str.strip(r'\\r')
print df
             id             29
0      location  Uttar Pradesh
1  country_name          India
2  total_deaths             20

Si desea utilizar replace, agregue r y uno \:

print df.replace({r'\\r': ''}, regex=True)
             id             29
0      location  Uttar Pradesh
1  country_name          India
2  total_deaths             20

En replace puede definir una columna para reemplazar como:

print df
               id               29
0        location  Uttar Pradesh\r
1    country_name            India
2  total_deaths\r               20

print df.replace({'29': {r'\\r': ''}}, regex=True)
               id             29
0        location  Uttar Pradesh
1    country_name          India
2  total_deaths\r             20

print df.replace({r'\\r': ''}, regex=True)
             id             29
0      location  Uttar Pradesh
1  country_name          India
2  total_deaths             20

EDITAR por comentario:

import pandas as pd

df = pd.read_csv('data_source_test.csv')
print df
   id country_name           location  total_deaths
0   1        India          New Delhi           354
1   2        India         Tamil Nadu            48
2   3        India          Karnataka             0
3   4        India      Andra Pradesh            32
4   5        India              Assam           679
5   6        India             Kerala           128
6   7        India             Punjab             0
7   8        India      Mumbai, Thane             1
8   9        India  Uttar Pradesh\r\n            20
9  10        India             Orissa            69

print df.replace({r'\r\n': ''}, regex=True)
   id country_name       location  total_deaths
0   1        India      New Delhi           354
1   2        India     Tamil Nadu            48
2   3        India      Karnataka             0
3   4        India  Andra Pradesh            32
4   5        India          Assam           679
5   6        India         Kerala           128
6   7        India         Punjab             0
7   8        India  Mumbai, Thane             1
8   9        India  Uttar Pradesh            20
9  10        India         Orissa            69

Si es necesario, reemplace solo en la columna location:

df['location'] = df.location.str.replace(r'\r\n', '')
print df
   id country_name       location  total_deaths
0   1        India      New Delhi           354
1   2        India     Tamil Nadu            48
2   3        India      Karnataka             0
3   4        India  Andra Pradesh            32
4   5        India          Assam           679
5   6        India         Kerala           128
6   7        India         Punjab             0
7   8        India  Mumbai, Thane             1
8   9        India  Uttar Pradesh            20
9  10        India         Orissa            69
11
jezrael 11 may. 2016 a las 16:38

Use str.replace, necesita escapar de la secuencia para que la trate como un retorno de carro en lugar del literal \r:

In [15]:
df['29'] = df['29'].str.replace(r'\\r','')
df

Out[15]:
             id             29
0      location  Uttar Pradesh
1  country_name          India
2  total_deaths             20
2
EdChum - Reinstate Monica 11 may. 2016 a las 11:19

El siguiente código elimina \ n espacios de tabulación, \ n nueva línea y retorno de carro y es ideal para condensar datos en una fila. La respuesta se tomó de https://gist.github.com/smram/d6ded3c9028272360eb65bcab564a18a>

df.replace(to_replace=[r"\\t|\\n|\\r", "\t|\n|\r"], value=["",""], regex=True, inplace=<INPLACE>)
1
Gwen Au 28 oct. 2019 a las 00:00