一、处理丢失数据
(1)丢失数据的类型
1)None
2) np.nan(NaN)
两种丢失数据的区别:
type(None) NoneType type(np.nan) float
为什么在数据分析中需要用到的是浮点类型的空而不是对象类型?
- 数据分析中会常常使用某些形式的运算来处理原始数据,如果原数数据中的空值为NAN的形式,则不会干扰或者中断运算。
- NAN可以参与运算的
- None是不可以参与运算
np.nan + 1 nan None + 1 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-3fd8740bf8ab> in <module> ----> 1 None + 1 TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
在pandas中如果遇到了None形式的空值则pandas会将其强转成NAN的形式。
df = DataFrame(data=np.random.randint(0,100,size=(7,5))) df.iloc[2,3] = None df.iloc[4,2] = np.nan df.iloc[5,4] = None df
二、pandas处理空值操作
- isnull
- notnull
- any
- all
- dropna
- fillna
- 方式1:对空值进行过滤(删除空所在的行数据)
- 技术:isnull,notnull,any,all
df.isnull()
#哪些行中有空值 #any(axis=1)检测哪些行中存有空值 df.isnull().any(axis=1) #any会作用isnull返回结果的每一行 #true对应的行就是存有缺失数据的行
df.notnull()
df.notnull().all(axis=1)
#将布尔值作为源数据的行索引
df.loc[df.notnull().all(axis=1)] #取出不含空的行#获取空对应的行数据
df.loc[df.isnull().any(axis=1)]#获取空对应行数据的行索引
indexs = df.loc[df.isnull().any(axis=1)].index
indexs#获取非空对应行数据的行索引
indexs1 = df.loc[df.notnull().all(axis=1)].index
indexs1df.drop(lables=indexs,axis=0) #drop 删除指定indexs对应的索引的行,axis 0表示为行
方式2:
- dropna:可以直接将缺失的行或者列进行删除
df.dropna(axis=0) #可以直接将缺失的行或者列进行删除
- dropna:可以直接将缺失的行或者列进行删除
- 技术:isnull,notnull,any,all