前言
最近看到一些教程关于“pandas读取数据之后,如何处理缺失值或者如何替换指定值为另外一个值”
看了那些教程,然后进行了一会实操,发现不能满足我的需求,于是开始探索另外的解决办法
下面来看一下解决方案
0x01、不设置默认加载空值为NAN keep_default_na=False
1 | df = pandas.read_excel("/home/project/day320/test.xlsx", keep_default_na=False) |
注释:pandas加载Excel表格,空值都是默认为 NAN,即源码中keep_default_na=True
所以当我们想要空值就是空值的话,那么可以设置 keep_default_na=False
,这时候,读取出来的空值是空字符串
可是,我的Excel表格之前就是存在很多 NA 值的,这不能满足我的需求,我其实是想将 NA 值再还原回原来的空字符串,所以请继续看后面的方法
0x02、用dropna()、fillna()处理缺失值
存在下面的使用方法:
dropna:根据标签的值中是否存在缺失数据,然后对轴标签进行过滤,可以通过阈值来调节对缺失值的删除的容忍度
fillna:用指定值或者插值方法(如ffill或者bfill)填充缺失数据
isnull:用于判断单元格是否为空值;若为空值,则返回True
- notnull:isnull的对立
1 | 删除空值: |
==前方高能,巨坑提示==如果你的数据中其实看起来就是空值的,但是这时候有可能为 空白的字符串 那么,你使用fillna
或者dropna
是不会生效的!!!!
小结:对于一些不确定的,或者不一定为空的内容,还是不能直接使用这两个dropna
、fillna
这两个来处理缺失值。
相关参考fillna和inplace使用文章,请点击我进行了解
0x03、使用强大的replace
来填充任何值的数据
pandas提供了一个replace方法,并且这个方法==可以使用正则==来处理1
2
3
4
5
6df.replace(to_replace=r"^NA$", value="", inplace=True, regex=True)
- to_replace:被替换的字符
- value:替换后的字符
- inplace:是否在原基础上进行修改
- regex:是否为正则表达式方式
由于我的表格里面的空值都是写着NA的,所以对于我来说,使用这个方法是最好的一个实现办法
如果你的空白字符可能含有空格、换行、制表符等空白字符的话,可以使用这个正则来替换:1
df.replace(to_replace=r"^\s*$", value="", inplace=True, regex=True)