我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

目光集中在pandas库,它可以读取excel文件,返回dataframe对象。在读取excel文件的同时,实际上有个na_values参数就可以对数据进行第一波清洗,这就是本文主要描述的事情。

苏南大叔:python数据清洗,读取excel文件同时屏蔽不合理值为NaN - python-excel-na
python数据清洗,读取excel文件同时屏蔽不合理值为NaN(图3-1)

大家好,这里是苏南大叔的“奥林匹克技术竞赛”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.12.3pandas@2.2.2numpy@1.26.4xlrd@2.0.1openpyxl@3.1.2

安装第三方库

读取.xls文件,并非时pandas自带的功能,需要个xlrd的支持。否则会得到下面的错误提示信息:

ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 2.0.1 for xls Excel support Use pip or conda to install xlrd.

读取.xlsx文件的时候,使用的是另外一个openpyxl库。缺少的时候,会提示错误:

ImportError: Missing optional dependency 'openpyxl'.  Use pip or conda to install openpyxl.

解决方案:

pip install xlrd
pip install openpyxl

参考文章:

测试文件

这里有个test.xls文件,有两个sheet。内容如下图所示:

苏南大叔:python数据清洗,读取excel文件同时屏蔽不合理值为NaN - 测试数据
python数据清洗,读取excel文件同时屏蔽不合理值为NaN(图3-2)

读取文件

pd.read_excel("test.xlsx")

输出:

   id   name   job
0   1     苏南   NaN
1   2     大叔   NaN
2   3     大哥  CCTV
3   4  sunan
4   5     同学   007
5   6    大兄弟   MTV

列名都正确识别了,但是索引却有些问题。

索引序号 index_col

可以看到上面读取到的数据集是有点问题的。原数据里面是有索引数据的,但是函数有设置了一个新的索引。

pd.read_excel("test.xls", index_col=[0])

输出:

name   job
id
1      苏南   NaN
2      大叔   NaN
3      大哥  CCTV
4     sunan
5      同学   007
6     大兄弟   MTV

不能指定索引列名,但是要指定数字第几个。如果指定多个数字的话,就会生成多重索引的dataframe。但是这种很不常见。

过滤数据 na_values

这里可以看到,读到的数据存在着一些不合理数据,比如None/NaN等。包括007这种,如果需要,也可以视为不合理值。

pd.read_excel("test.xls", index_col=[0],na_values=["NA",""," ","  ","None","007"])

输出:

     name   job
id
1      苏南   NaN
2      大叔   NaN
3      大哥  CCTV
4   sunan   NaN
5      同学   NaN
6     大兄弟   MTV

这里其实也不是能过滤所有的数据,特殊情况下还是使用其他的方式比如正则表达式等进行过滤比较合适。

苏南大叔:python数据清洗,读取excel文件同时屏蔽不合理值为NaN - na数据转变
python数据清洗,读取excel文件同时屏蔽不合理值为NaN(图3-3)

参考文章:

不转换None

这里有个特例,就是None,即使不指定为na_values,也会被转变为NaN。解决方案是增加参数keep_default_na=False

pd.read_excel("test.xls", index_col=[0], keep_default_na=False, na_values=["NA",""," ","  ","007"])

输出:

     name   job
id
1      苏南  None
2      大叔   NaN
3      大哥  CCTV
4   sunan   NaN
5      同学   NaN
6     大兄弟   MTV

读取另外的sheet

默认情况下,读取的活动sheet。如果要读取到其他的非活动sheet,需要指定一下名称。比如:

pd.read_excel("test.xls", "Sheet2")

输出:

   task
0  none
1  fake

读取csv

csv文件虽然也是excel的一种变形,但是它是使用pd.read_csv()函数读取的。

pd.read_csv("test.csv")

参考文章:

使用pd.read_excel()读取csv文件的话,可能得到报错信息如下:

ValueError: Excel file format cannot be determined, you must specify an engine manually.

结语

当然,read_excel()函数还有很多其他参数,暂时用不到。所以,待议。更多python相关经验文章,请点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python