1、缺失值
当读取csv文件或者excel文件生成DataFrame时,某些单元格的数据是缺失的,缺失的部分会显示为NaN,None或者NaT(取决于单元格的数据类型)
NaN 表示数字类型的缺失值
NaT 表示时间类型的缺失值
None 表示字符串类型的缺失值
实际项目中,如果缺失值一直存在原始的数据源总,后续数据分析时很可能有错误的结果
需要根据实际情况进行抉择,来降低缺失值对于分析结果的影响
a 按单元格查看缺失值情况
使用isna函数
# 假设data_info为已经读取为DataFrame
data_info.isna()
该函数返回的是一个新的DataFrame,而内容是由布尔型数据组成,原始的DataFrame中的单元格如果数据缺失,在新的DataFrame中对应的单元格的内容是False,否则为True
b 按列查看缺失值
经常使用列聚合缺失值的数量
data_info.isna().sum()
返回每列对应缺失值的数量
c 按行查看缺失值
使用行聚合缺失的方法查看
data_info.isna().sum(1)
sum中的1是设置为行的参数,不是指行的索引值
d 过滤出缺失值的列
data_info.loc[:, data_info.isna().any()]
上面代码是行索引部分区所有的行、
列索引部分取所有包含缺失值的列
any类似sum函数,只是做布尔聚合
e 过滤出缺失值的行
data_info.loc[data_info.isna().any(1), :]
输出的是行中有缺失值的行
f 缺失值的个数
data_info.isna().sum().sum()
输出的值为整个DataFrame包含多少个缺失值
g 缺失值的删除
使用删除缺失值的方法dropna
- 删除所有缺失值所在的行
data_info.dropna()
2)输出所有缺失值的所在的列
data_info.dropna(axis=1)
3)删除少于X个正常值的行
data_info.dropna(thresh=2)
上述例子是删除正常值小于2个的行
4)参考某几列作为删除依据
data_info.dropna(subset=['居住地'])
则会删除居住地为缺失值的行
注意:dropna方法默认不会改变调用他的DataFrame,如果需要修改需要进行赋值
5)缺失值替换
i 全表固定值替换
data_info.fillna('合肥')
则DataFrame里面的缺失值都会用合肥进行填充
ii 按列固定值替换
data_info['居住地'] = data_info['居住地'].fillna('河北')
DataFrame中居住地一列的缺失值都会用河北填充
iii 按行固定值替换
data_info.loc["李洛克", :] = data_info.loc["李洛克", :].fillna("20")
iiii 最近有效值替换
data_info.fillna(method='ffill')
当method为ffill时,将上面的值往下填充,当method为bfill时会用下一个有效值往上填充
iiiii 处理重复值
data_info.duplicated()
duplicated函数是识别是否存在重复的行,返回
布尔类型
使用drop_duplicates进行删除重复值
data_info = data_info.drop_duplicates()