pandas 读写 txt 报错

2018-06-04 11:30:13 +08:00
 yeyu1989

pandas 读写 txt 时遇到的两个问题:

1、txt 的分隔符为|,文档使用 gbk 编码,由于解码时存在特殊字符的 encode 后的字符串也有“|”,导致有一些行析出的列长度大于其他长度,因而读取失败;

2、写入时,报错 UnicodeEncodeError: 'gbk' codec can't encode character '\u4dae' in position 151: illegal multibyte sequence

请问大神们,应该怎么搞

2703 次点击
所在节点    Python
11 条回复
shnj
2018-06-04 13:20:31 +08:00
第一个问题: 如果有问题的行不多且可以舍弃,可以使用 error_bad_lines 参数,ref: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
第二个问题没遇到过,但是网上有些解决方案,改变标准输出的默认编码应该可以解决。
chesterzzy
2018-06-04 13:22:48 +08:00
先把 gbk 转为 utf-8 再说。
RicardoScofileld
2018-06-04 13:48:05 +08:00
你指定在 read 的时候,指定 names,这样的话就不会报错了
yeyu1989
2018-06-04 14:06:50 +08:00
@shnj 嗯,这个参数试过,读缺失可以用。但还没来得及验证,第二个错就开始报了。不知道有没有什么关联。
yeyu1989
2018-06-04 14:10:31 +08:00
@chesterzzy 这个怎么转?我附了语句了
yeyu1989
2018-06-04 14:12:16 +08:00
@RicardoScofileld names : array-like, default None 是指这个参数么。这个好像是列名?
imzhong
2018-06-04 14:23:53 +08:00
.encode('utf_8') 试试,不行 用.encode('gb18030',errors='replace')把无法处理的字符换成‘?’
RicardoScofileld
2018-06-04 15:02:40 +08:00
@yeyu1989 对 你指定列名就好了
yeyu1989
2018-06-04 15:38:57 +08:00
@RicardoScofileld 我使用了参数 header=None,所有列名都是 0,1,2,3 这些好像。有影响吗
flyingghost
2018-06-04 15:49:38 +08:00
sep 参数支持正则表达式。如果你的分隔符和字符串能用某种正则来做区分,那可以把单纯的"|"字符替换成正则来做分割。
第二个问题,这确实不是合法字符啊。最好是搞清楚来源是什么。很有可能是读时就读错了,最好解决掉。否则这行数据有可能是脏的。
RicardoScofileld
2018-06-04 16:40:08 +08:00
@yeyu1989 这是默认生成的,你最好自己指定

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/460168

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX