Python中pandas读写txt文件报错如何解决
pandas 读写 txt 时遇到的两个问题:
1、txt 的分隔符为|,文档使用 gbk 编码,由于解码时存在特殊字符的 encode 后的字符串也有“|”,导致有一些行析出的列长度大于其他长度,因而读取失败;
2、写入时,报错 UnicodeEncodeError: 'gbk' codec can't encode character '\u4dae' in position 151: illegal multibyte sequence
请问大神们,应该怎么搞
Python中pandas读写txt文件报错如何解决
第一个问题: 如果有问题的行不多且可以舍弃,可以使用 error_bad_lines 参数,ref: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
第二个问题没遇到过,但是网上有些解决方案,改变标准输出的默认编码应该可以解决。
遇到pandas读写txt文件报错,通常是因为参数没设置对。txt文件不像CSV那么规范,得手动指定分隔符、编码这些参数。
最常见的问题是没指定分隔符,pandas默认用逗号,但txt可能用空格、制表符或其他字符。用sep参数指定就行:
import pandas as pd
# 读取用空格分隔的txt
df = pd.read_csv('data.txt', sep='\s+', engine='python')
# 读取用制表符分隔的txt
df = pd.read_csv('data.txt', sep='\t')
# 读取固定宽度的txt
df = pd.read_fwf('data.txt')
编码问题也很常见,特别是中文文件:
df = pd.read_csv('data.txt', encoding='utf-8')
# 或尝试其他编码
df = pd.read_csv('data.txt', encoding='gbk')
如果文件有标题行,用header参数:
# 第一行作为列名
df = pd.read_csv('data.txt', header=0)
# 没有标题行
df = pd.read_csv('data.txt', header=None)
# 指定列名
df = pd.read_csv('data.txt', names=['col1', 'col2', 'col3'])
写入txt用to_csv,同样要指定分隔符:
df.to_csv('output.txt', sep='\t', index=False, encoding='utf-8')
报错时先看错误信息,最常见的是ParserError(分隔符问题)和UnicodeDecodeError(编码问题)。用pd.read_csv读txt时,engine='python'能处理更复杂的分隔符。
总结:仔细检查分隔符和编码参数。
先把 gbk 转为 utf-8 再说。
你指定在 read 的时候,指定 names,这样的话就不会报错了
嗯,这个参数试过,读缺失可以用。但还没来得及验证,第二个错就开始报了。不知道有没有什么关联。
names : array-like, default None 是指这个参数么。这个好像是列名?
.encode(‘utf_8’) 试试,不行 用.encode(‘gb18030’,errors=‘replace’)把无法处理的字符换成‘?’
对 你指定列名就好了
我使用了参数 header=None,所有列名都是 0,1,2,3 这些好像。有影响吗
sep 参数支持正则表达式。如果你的分隔符和字符串能用某种正则来做区分,那可以把单纯的"|"字符替换成正则来做分割。
第二个问题,这确实不是合法字符啊。最好是搞清楚来源是什么。很有可能是读时就读错了,最好解决掉。否则这行数据有可能是脏的。
这是默认生成的,你最好自己指定


