数据清洗:Python删除一条记录内的换行符

本文介绍了在处理CSV数据时遇到的换行符问题,可能导致一条记录被误读为多条。通过设置`open()`函数的`newline`参数为` `,可以确保数据原样读取。同时,提供了删除记录内换行符的方法,对于小量数据可手动替换,大量数据则使用Python的pandas库进行处理。给出了完整的代码示例和数据处理流程。
摘要由CSDN通过智能技术生成

近日在处理数据的时候遇到一条记录内存在换行符"\n",记录结尾处以“\r\n”换行,如果不注意有可能读取过来按两条记录处理了。这种情况下,如何保证数据原样读取,另外为了避免因记录内存在换行符"\n"干扰数据应用,考虑将其删除。
在这里插入图片描述
在这里插入图片描述

读取数据

用open()函数读取数据,open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True),经常使用参数说明:

  • mode:打开文件的基本模式,取值有“r”(只读)、“w”(只写)、“a”(追加)等;
  • encoding:表示返回的数据采用何种编码,如“utf-8”、“gbk”、“gb2312”、“gb18030”;
  • errors:表示对错误的处理,取值一般有“strict”、“ignore”。当取“strict”的时候,字符编码出现问题的时候会报错;当取“ignore”的时候,编码出现问题,程序会忽略而过,继续执行下面的程序;
  • newline:表示一行结束时的换行符,可以取的值有None、“\n”、“\r”、“\r\n”,但是这个参数只对文本模式有效。

newline参数可解决上面遇到的问题,首先看一下未设置newline参数时,即newline取默认值None,可以看到记录内存在换行符“\n”的都被处理成了两条。

num=0
for line in open('test.csv', mode='r'):
    print("第"+str(num)+"条记录:")
    print(line)
    num+=1

在这里插入图片描述
为了保证数据的原样读取,需要明确一条记录的结束符,设置newline=’\r\n’,此时以’\r\n’为一条记录结束的换行符,可以看到记录内存在换行符“\n”的按一条记录处理了。

num=0
for line in open('test.csv', mode='r',newline='\r\n'):
    print("第"+str(num)+"条记录:")
    print(line)
    num+=1

在这里插入图片描述

删除记录内的换行符

虽然设置一定的参数,可以保证正确读入数据,但是正确读取数据才是第一步,记录内换行符的存在有可能对后期的数据分析产生影响,为了避免干扰数据分析和建模,考虑将记录内的换行符删除。

  • 当数据量比较小时
    可以采用手动处理的方式,即在Notepad++中采用两次替换,“\n”(LF)替换成“”,然后再将“\r”(CR)替换成“\n”。
    在这里插入图片描述
  • 当数据量比较大时
    当数据量太大时,很多文件都无法打开没办法进行手动替换,而且数据量太大时,手动替换也比较耗时,于是写程序自动处理,主要用到了split()、join()函数。
import pandas as pd
##读取数据并查看数据基本信息
file='test.csv'  ##所在文件夹目录
data=pd.read_csv(file,encoding='gb18030',sep=None,delimiter=",",error_bad_lines=False)
columns=data.columns.tolist()   ##获取字段
print(columns)
#print(data.info())
data.head()

在这里插入图片描述

result=[]
for i in data.values:
    print("原数据",i.tolist())    ##按行打印原始数据
    print("删除换行符后的数据:",[' '.join(str(j).split('\n')) for j in i])  ##按行打印删除掉'\n'的数据
    result.append([' '.join(str(j).split('\n')) for j in i])
result_data=pd.DataFrame(result,columns=columns)
result_data.to_csv("result_data.csv",encoding='gb18030',index=False)
result_data.head()

在这里插入图片描述
在这里插入图片描述
附:完整代码和数据可通过以下链接自行下载。
链接:https://pan.baidu.com/s/1EDFxVx5BWnI6LU0EocDN9Q
提取码:x04x

ps:初衷是通过撰写博文记录自己所学所用,实现知识的梳理与积累;将其分享,希望能够帮到面临同样困惑的小伙伴儿。如发现博文中存在问题,欢迎随时交流~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值