Joyful Pandas 第六章学习笔记

开场白

正式开始第一场Datawhale的学习活动。

一、缺失值观测

1.了解缺失方法

(a)isna和notna方法–判断缺失值

isnan 用于判断是不是Nan,notna用于判断是不是非Nan。
对series使用则返回布尔列表,对Dataframe使用则会返回一个布尔表。

(b) 查看缺失值所在行的方法

查看缺失值所在行的方法是定义好所在的列,如df[df['Physics'].isna()];
如果想查看所有缺失值所在行的方法则不需要定义所在咧,如df[df.isna().all(1)],当然这种情况要所有值都是nan才会有结果。

(c)查看所有非缺失值所在列的方法

如想查看所有非缺失值所在列,可使用df[df.notna().all(1)],如果只是想查看有只要存在非缺失值的所在列的方法,可使用df[df.notna().any(a)]

2.三种缺失符号

(a) np.nan

特点:
1.该符号很奇葩,不等于任何东西,甚至不等于自身;
2.使用equals函数比较时,会自动略过两侧全是np.nan的单元格,对结果无影响;
3.对布尔类型的列表,如果有np.nan填充,则值自动变为True;
4.当修改纯布尔列表时,布尔列表值自动转为浮点数;
5.对于所有的表格,读取时缺失值全部填充为np.nan类型;如果是整型,则转为浮点数;如果为字符串,则只能转为Object(‘o’)。

(b)None

特点:
1.等于自身;
2.布尔结果为False;
3.修改布尔列表不会改变数据类型;
4.传入数值类型的列表后,会自动变为np.nan;
5.None传入Object类型的列表时保持不动;
6.在使用equals函数时不会被略过;

(c)NaT

NaT是针对时序的缺失值,是时序版的np.nan,二者特点一致;

3.Nullable类型与NA符号

为了一改之前三种缺失符号及其复杂的特点,pandas 1.0统一了缺失类型为Nullable且所有缺失符号统一为NA。

(a)Nullable整型数据

Nullable整型数据的符号为Int,首字母改为大写。

使用Nullable整型数据的好处在于无论是第2节中提到的哪种缺失值,统一输出为NA,且不改变数据类型。

(b)Nullable布尔

作用与整型类似,记作boolean。

(c)string类型(另一种Nullable类型)

特点同上。

4.NA的特点

(a)逻辑运算

主要根据逻辑运算的结果是否与pd.NA取值有关。有关,则结果为NA;无关,则直接出结果。

(b)算术元算与比较运算

除了pd.NA ** 0 和1 ** pd.NA值为1外,其他均为NA。

5.convert_dtypes方法

该方法在读取数据时直接把数据列转为Nullable类型。

二、缺失数据的运算与分组

1.加号与乘号规则

a)使用加法时,缺失值为0;
b)使用乘法时,缺失值为1;
c)使用累积函数时,缺失值自动忽略;

2.groupby方法中的缺失值

自动忽略缺失值所在的组。

三、填充与剔除

1.fillna方法

(a)值填充与前后向填充

值填充:df[‘Physics’].fillna(‘missing’).head()

前向填充:df[‘Physics’].fillna(method=‘ffill’).head()

后向填充:df[‘Physics’].fillna(method=‘backfill’).head()

(b)填充中的对齐特性

唱使用对应列的均值作为填充值,使用方法如df_f.fillna(df_f.mean())

2.dropna方法

(a)axis参数
使用方法:df_d.dropna(axis=0)

(b)how参数
使用方法:df_d.dropna(axis=1,how=‘all’),可选all或any,表示全缺失去除和存在缺失去除。

(c)subset参数(在某一组列范围内搜索缺失值)
使用方法:df_d.dropna(axis=1,subset=‘B’, ‘C’)

四、差值(interpolation)

1.线性插值

(a)索引无关的线性插值

默认情况下使用interpolate函数时,会直接对缺失的值进行线性插值;

(b)与索引有关的插值

当在method中使用index和time选项时,可以使插值线性的依赖索引或时间。

2.interpolate函数中的限制参数

(a)limit表示最多插入多少个

使用方法:s.interpolate(limit=2)

(b)limit_direction表示插值方向,可选forward,backward,both,默认向前

(c)limit_area表示插值区域,可选inside, outside,默认None

五、问题与练习

1.问题

(a)如何删除缺失值占比超过25%的列?
答:两种方法,info函数方法:第一步,使用info函数查看缺失信息;第二步,删除缺失值占比超过25%的列;isna函数方法:第一步,使用index获取最大列数;第二步,使用sum计算出列缺失值的个数;第三步,删除缺失值占比超过25%的列。

(b)什么是Nullable类型?请谈谈为什么要引入这个设计?
答:Nullable是pandas在升级至1.0后新引入的一种缺失值类型,其符号统一为NA,避免了老版本中np.nan、None、NaT复杂且不统一的语法关系,让缺失值的表示和应用更简单。

(c)对于一份有缺失值的数据,可以采取哪些策略或方法深化对它的了解?
答:可以1)使用isna和notna函数查看缺失值所在的行和列;2)使用fillna方法填充数据;3)使用线性插值的方法填充;等加深对该缺失值的数据的了解。

2.练习

【练习一】现有一份虚拟数据集,列类型分别为string/浮点/整型,请解决如下问题:
(a)请以列类型读入数据,并选出C为缺失值的行。
Joyful Pandas 第六章学习笔记_第1张图片
(b)现需要将A中的部分单元转为缺失值,单元格中的最小转换概率为25%,且概率大小与所在行B列单元的值成正比。

(该题没读懂题目是什么意思,此处附上参考答案)

Joyful Pandas 第六章学习笔记_第2张图片

【练习二】 现有一份缺失的数据集,记录了36个人来自的地区、身高、体重、年龄和工资,请解决如下问题:

(a)统计各列缺失的比例并选出在后三列中至少有两个非缺失值的行。

Joyful Pandas 第六章学习笔记_第3张图片

(b)请结合身高列和地区列中的数据,对体重进行合理插值。

Joyful Pandas 第六章学习笔记_第4张图片

(完)

学习过程不难,但是解决后面的习题对我而言还是太难了!!!

你可能感兴趣的:(Joyful Pandas 第六章学习笔记)