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
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类似
Pandas在1.0新版本中引入的重大改变,其目的就是为了(在若干版本后)解决之前出现的混乱局面,统一缺失值处理方法,Nullable类型主要有Int,boolean,string,其缺失值统一用NA表示
进行逻辑运算时,只需看该逻辑运算的结果是否依赖pd.NA的取值,如果依赖,则结果还是NA,如果不依赖,则直接计算结果
进行算术运算和比较运算时,这里只需记住除了下面两类情况,其他结果都是NA即可pd.NA ** 0 =1
1 ** pd.NA =1
convert_dtypes方法
这个函数的功能往往就是在读取数据时,就把数据列转为Nullable类型
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
主要有两种方法
df['Physics'].fillna('missing').head()
0 A+
1 B+
2 B+
3 missing
4 A-
Name: Physics, dtype: object
主要有三个参数axis参数、how参数、subset参数
以线性插值为例,线性插值又分为与索引无关以及与索引有关的插值
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在缺失值处理方面的一些特性,便于以后应用于实际中。