4 个Python数据读取的常见错误

read_csv()是python数据分析包pandas里面使用频次较高的函数之一。它包括的参数差不多20个,可能一开始未必需要完整知道每个参数作用。不过,随着使用的深入,实际数据环境愈发复杂,处理的数据上亿行后,就会出现这样那样的问题,这样催促我们反过头来再去理解某些参数的作用。

今天,总结平时使用read_csv(),经常遇到的几个问题。

1、UnicodeDecodeError

read_csv 默认读入文件的编码格式为:utf-8,如果读入文件无法被utf-8编码,就会报上面的错误。

可是我们怎么知道读入文件的编码格式呢?今天,为大家介绍一个这方面的包:chardet,它能返回文件的编码格式。使用前先用pip install chardet,安装一下。 接下里这样编写返回编码格式,file为读入的文件名称。

# 获取文件编码类型def get_encoding(file):    # 二进制方式读取,获取字节数据,检测类型    with open(file, 'rb') as f:        return chardet.detect(f.read())['encoding']

通过charadet包分析出文件的编码格式后,不管使用 python原生的open, read,还是pandas的read_csv,都可以传入给参数encoding.

2、 sep分隔符

常见文件的分隔符,比如 , \t, csv文件默认为逗号,不过常用的大数据库,比如hive,有时会使用分隔符为\t,这时候就需要调整参数sep. 这类错误比较好解决。

3、读取文件时遇到和列数不对应的行,此时会报错

尤其在读入文件为上亿行的,快读完时,突然报出这个错,此行解析出的字段个数与之前行列数不匹配。

此时,需要调整一个参数:error_bad_lines为false,意思是忽略此行。

pandas.read_csv(***,error_bad_lines=False)

实际项目,读入的文件数据环境比我们预想的复杂。假设我们的数据文件默认分隔符为逗号,然后如果某行的某个单元格取值为:

'山东省, 潍坊市, 青州市'

就光这一个单元格,就会解析出多列,报错那也是自然的,这就要求我们在读入之前对数据做好充分的清洗。

4、EOF inside string starting at line 错误

这个错误在读入文件时,经常也会出现。这类错误需要修改 quoting参数。

df = pd.read_csv(csvfile, quoting=csv.QUOTE_NONE )

默认取值为0,遇到错误时,可以根据文档调整。

quoting : int or csv.QUOTE_* instance, default 0Control field quoting behavior per csv.QUOTE_* constants. Use one of QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3).

更多常见读取错误,欢迎大家留言。

本文分享自微信公众号 - Python与机器学习算法频道(alg-channel)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法channel

Python函数式编程 入门必备

python 支持函数式编程,提到数式编程,大家首先想到的是多个函数内嵌。的确是这样。不过,要想入门函数式编程,里面涉及到的闭包,是不得不掌握的,换句话说,如果...

12630
来自专栏CDA数据分析师

爬取视频数据后我们发现,原来逛B站也能学编程...

很多人提到B站,首先想到的就会是二次元或者鬼畜,上个月,我们公众号也发表了一篇关于B站鬼畜视频的文章:大数据解读B站火过蔡徐坤的“鬼畜“区巨头们。

15820
来自专栏深度学习计算机视觉

无人机图片物体检测baseline

The object category indicates the type of annotated object, (i.e., ignored regio...

17610
来自专栏程序员的知识天地

人生苦短:运行你的第一个 Python 脚本

Shell 是一个Read-Eval-Print-Loop(REPL),它只接受命令,评估它们并打印输出。

13430
来自专栏机器学习与统计学

100天搞定机器学习|Day21 Beautiful Soup

网络爬虫,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。通俗来说就是模拟用户在浏览器上的操作,从特定网站,自动提取对自己有价值的信息。主要通过查找域...

10820
来自专栏机器学习与统计学

用Python对你的微信好友进行一波骚操作

临近毕业,慢慢的也感伤起来,回想大学这几年,除了技术的成长,最值得庆幸的就是结交了一帮志同道合的好友。后期自己做了公众号,微信好友的数量也越来越多,身边人所扮演...

22540
来自专栏ATYUN订阅号

数据科学家常犯的十大编程错误

数据科学家是“比任何软件工程师都更擅长统计,比任何软件工程师都更擅长软件工程的的统计学家”。许多数据科学家都有统计学背景却缺乏在软件工程方面的经验。我是资深的数...

9820
来自专栏机器之心

商汤开源最大目标跟踪库PySOT,代码已正式上线!

前几天 CVer推送一篇:重磅!商汤开源最大目标跟踪库PySOT:含SiamRPN++和SiamMask等算法,介绍了来自商汤科技的STVIR(SenseTim...

11840
来自专栏Python绿色通道

如何实时可视化渲染你的数据?

在之前介绍PyQtGraph的文章中,我们都是一次性的获取数据并将其绘制为图形。然而在很多场景中,我们都需要对实时的数据进行图形化展示。

24950
来自专栏月色的自留地

TensorFlow从1到2(十五)(完结)在浏览器做机器学习

TensorFlow一直努力扩展自己的基础平台环境,除了熟悉的Python,当前的TensorFlow还实现了支持Javascript/C++/Java/Go/...

15220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励