前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >读CSV和狗血的分隔符问题,附解决方法!

读CSV和狗血的分隔符问题,附解决方法!

作者头像
double
发布2022-01-26 13:46:32
6.9K0
发布2022-01-26 13:46:32
举报
文章被收录于专栏:算法channel

你好,我是zhenguo

今天跟大家分享一个遇到的挺狗血的问题,读入csv文件关于分隔符的问题。

1

使用pandas读入csv文件后,发现列没分割开,所以将sep参数调整为\t,发现还是没分割开,再试空格,再试\s+,即各种空白字符组合,有几例能分隔开,但是还有些列无法分割开。

左思右想,不得其解。那就去查查csv文件有没有自动解析出分隔符的工具,其实这种工具并不难做,把每行的分隔符规律找一遍,按照不同概率给出不同的分隔符可能。

网上并没有找到,一般网上没有找到答案的问题,主要分两类,要么这个问题的关联领域是极其小众的,要么这个问题本不是问题,可能是因为犯傻导致的极其低级错误而出现的问题。

很明显读个csv列无法分割不属于小众问题,所以应该是犯傻导致。

果不其然,等我再三观察、在群里讨论哈佛哥提醒了我一句,才意识到读入文件没有分割,也就是N 行1列的数据格式,所以问题出在读入文件上。

2

作为延伸,我想说下csv文件一个被人诟病的问题,正是由于分割符导致。

如下文件a.csv,分隔符是逗号,你注意看Hi,pythoner单元格,它的取值中含有一个逗号

等我使用pandas读入此文件时,会发生什么:

代码语言:javascript
复制
import pandas as pd 
pd.__version__  # '1.2.4'
代码语言:javascript
复制
pd.read_csv('a.csv', index_col=False)

读入后,Hi,pythoner单元格的取值被截断为Hi

如果多个单元格存在多于1个逗号,因为列无法对其还会抛异常,为此read_csv还提供一个参数error_bad_lines,专门丢弃这种含有多个逗号的行,这种错误在大数据量时尤其容易出现,为了第一时间读入数据往往将error_bad_lines设置为False,即丢弃这种多逗号的行。

如果csv文件的分隔符是\t或其他,也同样面临一样的问题,如果分隔符恰好出现在单元格中,这种错误是不可避免的。

3

如果你的数据恰好又大量出现了分隔符的行,这就需要引起重视了。

为此比较保险的一种做法是,替换单元格中出现的csv文件的分隔符为其他符号,如分隔符为逗号,替换单元格的逗号为空格;如为\t,替换单元格的\t为逗号。

这样经过一遍替换处理后,就不会再出现数据缺失、有些行被过滤的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1
  • 2
  • 3
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档