第6章 缺失数据
1.缺失观测及其类型
1.1 缺失信息
1.2 三种缺失符号
1.3 Nullable类型与NA符号
1.4 NA特性
1.5 convert_dtypes方法
2.缺失数据的处理(运算与分组)
2.1 加乘累计
2.2 groupby方法中的缺失值
3.填充与剔除
3.1 fillna方法(填充)
3.2 dropna方法(剔除)
4.插值
4.1线性插值
4.2高级插值
import pandas as pd
import numpy as np
df = pd.read_csv('data/table_missing.csv')
1.缺失观测及其类型
1.1 缺失信息
# 返回布尔代数
df['Physics'].isna()
df['Physics'].notna()
# DataFrame使用会返回布尔表
df.isna()
# 缺失值统计
df.isna().sum()
# 缺失信息
df.info()
1.2 三种缺失符号
- np.nan
不等于任何东西,包括自己,为什么np.nan会不等于自己,如果等于自己的,不利于统计,例如要统计相等的值。
np.nan在numpy中为浮点型,数据集读取时,只要有缺失值,就会是浮点型。
pd.Series([1,np.nan,3]).dtype
#np.nan导致series中包含浮点型,所以series整体浮点型
对于布尔类型的列表,如果是np.nan填充,那么它的值会自动变为True而不是False。
pd.Series([1,np.nan,0],dtype='bool')
#dtype=bool将浮点型的np.nan转换为bull
但当修改一个布尔列表时,会改变列表类型,而不是赋值为True
s = pd.Series([True,False],dtype='bool')
s[1]=np.nan
s
#np.nan将bool型的series强制转换为浮点型
在所有的表格读取后,无论列是存放什么类型的数据,默认的缺失值全为np.nan类型
因此整型列转为浮点;而字符由于无法转化为浮点,因此只能归并为object类型(‘O’),原来是浮点型的则类型不变
- None
None等于自身,布尔值为False,修改布尔值不会改变数据类型,在传入数值类型后,会自动变为np.nan。 - NaT
NaT是针对时间序列的缺失值,是Pandas的内置类型,可以完全看做时序版本的np.nan,与自己不等,且使用equals是也会被跳过
1.3 Nullable类型与NA符号
(a)Nullable整型Int
(b)Nullable布尔boolean
(c)string类型
1.4 NA的特性
(a)逻辑运算
只需看该逻辑运算的结果是否依赖pd.NA的取值,如果依赖,则结果还是NA,如果不依赖,则直接计算结果
(b)算术运算和比较运算
这里只需记住除了下面两类情况,其他结果都是NA即可
pd.NA ** 0
1 ** pd.NA
1.5 convert_dtypes方法
读取数据时,就把数据列转为Nullable类型
2 缺失数据的运算与分组
2.1 加号与乘号规则
使用加法时,缺失值为0
使用乘法时,缺失值为1
使用累计函数时,缺失值自动略过
s.pct_change()
# DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)
# 表示当前元素与先前元素的相差百分比,当然指定periods=n,表示当前元素与先前n 个元素的相差百分比。
2.2 groupby方法中的缺失值
自动忽略为缺失值的组
3.填充与剔除
3.1 fillna方法
(a)值填充与前后向填充(分别与ffill方法和bfill方法等价)
(b)填充中的对齐特性
3.2 dropna方法
(a)axis参数:表示按行或列进行剔除。
(b)how参数:可以选all或者any,表示全为缺失去除和存在缺失去除。
(c)subset参数:在某一组列范围中搜索缺失值