数据清洗
为什么进行数据清洗?
- 我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗
缺失值的观察与处理
查看缺失值
方法一:df.info()
方法二:df.isnull().sum()
查找缺失值
- 有none、nan、isnull三种方法,具体效果如图所示
- 对于数值型:nan和isnull是相同效果;对于非数值型:nan并不起作用,只可以用isnull查找
dropna()函数
- axis:axis=0: 删除包含缺失值的行axis=1: 删除包含缺失值的列
- how: 与axis配合使用 how=‘any’ :只要有缺失值出现,就删除该行或列 how=‘all’: 所有的值都缺失,才删除行或列
- thresh:axis中至少有thresh个非缺失值,否则删除 比如axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除改行
- subset: list 在哪些列中查看是否有缺失值
- inplace: 是否在原数据上操作。如果为真,返回None否则返回新的copy,去掉了缺失值。
fillna()函数
- value: scalar, dict, Series, or DataFrame
- dict: 可以指定每一行或列用什么值填充
- method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}
- default None在列上操作
- ffill / pad: 使用前一个值来填充缺失值
- backfill / bfill :使用后一个值来填充缺失值
- limit 填充的缺失值个数限制
重复值的观察与处理
重复值的观察 df[df.duplicated()]
重复值的处理 df = df.drop_duplicates()
- 在对一些数值型属性进行判空处理后,填充0就可以进行重复值处理
特征处理
对连续型进行离散化处理
- 首先,使用describe()查看min和max
- 对于age属性进行平均划分,5代表分为五份;df[‘AgeBand’]代表新生成一个列;labels代表新属性列的取值
- 对于连续取值,不想均匀划分怎么办?
- 比如按照(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,并分别用类别变量12345表示
- 另一种,按比例划分;按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
对文本型变量进行转换
方法一:replace
- df[‘Sex_num’] = df[‘Sex’].replace([‘male’,‘female’],[1,2])
方法二:map
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})