目录
内容简介: 本篇首先介绍Pandas中的三种缺失值符号,针对其弊端介绍Nullable类型和NA符号,最后讲述了填充、剔除和插值三类缺失值处理方法。
缺失数据在数据预处理过程中非常常见,针对缺失数据Pandas有一定的解决方法,下面来简单介绍。
1 缺失值特性
缺失值可以通过isna
和notna
方法来查看,返回布尔值或布尔表。用info
可以查看缺失信息。
1.1 三种缺失值符号
(1) np.nan
- 不等与任何东西,甚至不等于自己
- 在用equals函数比较时,自动略过两侧全是np.nan的单元格
- 将原本整数的列变为浮点型
- 布尔型数据的表中若用
np.nan
填充,所有值自动变为True - 修改布尔列表的值为
np.nan
,改变表类型
(2) None
- 与
np.nan
相比,至少等于自身,即None == None
结果为True
- 布尔值为False
- 修改布尔列表不会改变数据类型
- 在传入数值类型后,会自动变为np.nan
- 使用equals函数时不会被略过
(3 )NaT
- 针对时间序列的
np.nan
- 与自己不等
- 使用equals是也会被跳过
1.2 Nullable类型
为了解决上面三种类型带来的混乱与缺失值处理方法不统一问题,官方库在1.0后引入了Nullable类型。
它的好处就在于:前面提到的三种缺失值都会被替换为统一的NA符号,且不改变数据类型。
(a)整形Nullable
对原来的int
改为Int
s_new = pd.Series([1, 2], dtype="Int64")
(b)布尔 Nullable
记号为boolean
s_new = pd.Series([0, 1], dtype="boolean")
(c)String类型
记号为string
,可以有效区分原本含糊不清的Object类型。
- 本质上也属于Nullable类型,因为并不会因为含有缺失而改变类型
- 调用字符方法后,string类型返回的是Nullable类型,object则会根据缺失类型和数据类型而改变
s = pd.Series(['dog','cat'],dtype='string')
1.3 convert_dtypes方法
这个函数的功能往往就是在读取数据时,就把数据列转为Nullable类型,是Pandas 1.0的新函数
pd.read_csv('data/table_missing.csv').dtypes
pd.read_csv('data/table_missing.csv').convert_dtypes().dtypes
2 缺失数据的运算规则
2.1 普通运算
- 使用加法时,缺失值为0
- 使用乘法时,缺失值为1
- 使用累计函数时,缺失值自动略过
2.2 groupby方法中的缺失值
- 自动忽略