如何删除数据框中的回车

时间:2016-05-11 11:13:49

标签: python pandas replace carriage-return data-cleaning

我的数据框包含名为id,country_name,location和total_deaths的列。在进行数据清理过程时,我偶然发现了一个附加了'\r'的值。完成清理过程后,我将生成的数据帧存储在destination.csv文件中。由于上面的特定行附加了\r,因此它始终会创建一个新行。

id                               29
location            Uttar Pradesh\r
country_name                  India
total_deaths                     20

我想删除\r。我试过了df.replace({'\r': ''}, regex=True)。它不适合我。

还有其他解决方案吗?有人可以帮忙吗?

编辑:

在上面的过程中,我正在迭代df以查看是否存在\r。如果存在,则需要更换。此处row.replace()row.str.strip()似乎无效,或者我可能以错误的方式执行此操作。

我不想在使用replace()时指定列名或行号。因为我无法确定只有“位置”列会有\r。请找到以下代码。

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

5 个答案:

答案 0 :(得分:8)

另一种解决方案是使用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

如果您想使用replace,请添加r和一个\

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

replace中,您可以定义要替换的列:

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

通过评论编辑:

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

如果只需要在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

答案 1 :(得分:2)

使用str.replace,您需要转义序列,以便将其视为回车符而不是文字\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 :(得分:0)

以下代码删除了\ n制表符空格,\ n新行和\ r回车符,非常适合将基准点压缩成一行。答案来自https://gist.github.com/smram/d6ded3c9028272360eb65bcab564a18a

df.replace(to_replace=[r"\\t|\\n|\\r", "\t|\n|\r"], value=["",""], regex=True, inplace=<INPLACE>)

答案 3 :(得分:0)

不知何故,接受的答案对我不起作用。最终,我通过按照以下方式进行操作找到了解决方案

df["29"] = df["29"].replace(r'\r', '', regex=True)

不同之处在于我使用 \r 而不是 \\r

答案 4 :(得分:-1)

只需使df等于df.replace代码行,然后打印df。

df=df.replace({'\r': ''}, regex=True) 
print(df)
相关问题