Pandas学习笔记--缺失值处理

Pandas学习笔记–缺失数据

一.缺失观测

1. 了解缺失信息

isna和notna方法
1.将方法用于Series,返回布尔列表,如下所示

df['Physics'].isna().head()
0    False
1    False
2    False
3     True
4    False
Name: Physics, dtype: bool

df['Physics'].notna().head()
0     True
1     True
2     True
3    False
4     True
Name: Physics, dtype: bool

2.对DataFrame使用返回布尔表

df.isna().head()

School	Class	ID	Gender	Address	Height	Weight	Math	Physics
0	False	False	True	False	False	False	True	False	False
1	False	False	True	False	False	False	True	False	False
2	False	False	False	False	False	False	True	False	False
3	False	True	True	False	False	False	False	False	True
4	False	False	False	True	False	False	False	False	False

同时isna配合sum方法可以查看dataframe每列缺失值

df.isna().sum()

查看dataframe,某列缺失值所在行,以第二行为例

df[df['Class'].isna()]


School	Class	ID	Gender	Address	Height	Weight	Math	Physics
3	S_1	NaN	NaN	F	street_2	167	81.0	80.4	NaN
11	S_1	NaN	1302.0	F	street_1	175	NaN	87.7	A-
18	S_2	NaN	2104.0	F	street_5	159	97.0	72.2	B+
26	S_2	NaN	2302.0	M	street_5	171	88.0	NaN	A

挑选出所有非缺失值行(学习资料中写的列,可能是笔误)
使用all就是全部非缺失值,如果是any就是至少有一个不是缺失值

f[df.notna().all(1)]

chool	Class	ID	Gender	Address	Height	Weight	Math	Physics
5	S_1	C_2	1201.0	M	street_5	159	68.0	97.0	A-
6	S_1	C_2	1202.0	F	street_4	176	94.0	63.5	B-
12	S_1	C_3	1303.0	M	street_7	188	82.0	49.7	B

2. 缺失符号(三种)

1.np.nan
在所有的表格读取后,无论列是存放什么类型的数据,默认的缺失值全为np.nan类型,如果该列有缺失值,整型列转为浮点;而字符由于无法转化为浮点,因此只能归并为object类型(‘O’),原来是浮点型的则类型不变。

type(np.nan)
pd.Series([1,2,3]).dtype
pd.Series([1,np.nan,3]).dtype

2.None
在传入数值类型后,会自动变为np.nan,只有当传入object类型是保持不动,几乎可以认为,除非人工命名None,它基本不会自动出现在Pandas中

s=pd.Series([1,None])
s[1]
type(pd.Series([1,None],dtype='O')[1])

3.NaT
NaT是针对时间序列的缺失值,可以完全看做时序版本的np.nan,特性与np.nan类似

3. Nullable类型与NA符号

Pandas在1.0新版本中引入的重大改变,其目的就是为了(在若干版本后)解决之前出现的混乱局面,统一缺失值处理方法,Nullable类型主要有Int,boolean,string,其缺失值统一用NA表示

NA运算

进行逻辑运算时,只需看该逻辑运算的结果是否依赖pd.NA的取值,如果依赖,则结果还是NA,如果不依赖,则直接计算结果
进行算术运算和比较运算时,这里只需记住除了下面两类情况,其他结果都是NA即可pd.NA ** 0 =1 1 ** pd.NA =1

convert_dtypes方法
这个函数的功能往往就是在读取数据时,就把数据列转为Nullable类型

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

  1. 加号与乘号规则:使用加法时,缺失值为0,使用乘法时,缺失值为1,使用累计函数时,缺失值自动略过:
s = pd.Series([2,3,np.nan,4])
s.sum()
9
s.prod()
24
s.cumsum()  //累加
0    2.0
1    5.0
2    NaN
3    9.0
dtype: float64
  1. groupby方法中的缺失值
    自动忽略为缺失值的组

三、填充与剔除

主要有两种方法

  1. fillna方法
    值填充
df['Physics'].fillna('missing').head()

0         A+
1         B+
2         B+
3    missing
4         A-
Name: Physics, dtype: object
  1. dropna方法

主要有三个参数axis参数、how参数、subset参数

四、插值(interpolation)

以线性插值为例,线性插值又分为与索引无关以及与索引有关的插值

s = pd.Series([1,10,15,-5,-2,np.nan,np.nan,28])
s
s.interpolate()
s.interpolate().plot()
s.index = np.sort(np.random.randint(50,300,8))
s.interpolate()
s.interpolate().plot()

与索引有关的插值

s.interpolate(method='index').plot()

 方法interpolate中的限制参数主要有:limit表示最多插入多少个、limit_direction表示插值方向,可选forward,backward,both、limit_area表示插值区域,可选inside,outside默认None

在本小节主要学习缺失值处理相关的一些方法,第一部分学习了观测缺失值第二部分学习了缺失数据的运算及分组,第三部分是有关缺失数据填充与剔除,最后是关于插值的方法的学习,总之通过本节学习掌握了Pandas在缺失值处理方面的一些特性,便于以后应用于实际中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值