社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

机器学习初学者 • 3 年前 • 472 次点击  

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

1

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

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

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

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

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

2

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

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

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

import pandas as pd 
pd.__version__  # '1.2.4'
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为逗号。

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

往期精彩回顾




站qq群554839127,加入微信群请扫码:
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/122867
 
472 次点击