我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗,本章我们将学习缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的亚子。
2、数据清洗
2.1 缺失值观察与处理
2.1.1缺失值的观察
#方法一
df.info()
#方法二
df.isnull().sum()
缺失值的处理
#检索空缺值
#方法一
np.isnan(df['Age'])
#方法二
df['Age'].isnull()
#注意:df[['Age']].isnull()返回的是DataFrame对象。
其中关于np.isnan()和pd.isnull()用法可以参考,写得很清晰。
问题:关于用df['Age']==np.nan这个方法检索空值的问题?
#我是这样理解的
import numpy as np
np.nan==np.nan
#返回为False,故这样检查空值有问题。
#另外用下面这种方法检索空值也容易出错
df[1]==None
#返回结果与上面一样
#我自己从np.nan ==None返回False来理解
另外的情况是
还有一种情况是
上面两种情况再进行缺失值的处理比较容易出错。
#缺失值类型有:空格,逗号,或者本身为np.nan或者为None,或者其他
#建议先查看离散变量的取值情况,代码如下:
for col in df:
print(f'{col}:{df[col].unique()}')
#这样就可以对缺失值的形式进行了解
#明白缺失值的形式之后,就可以用replace函数替换成统一的形式,比如np.nan形式
2.1.2、缺失值的处理
关于replace函数,这个博客写得很清晰,不再展开了。
缺失值处理这块是个大问题,可以参考二手车交易价格预测的思路
dropna()用法,主要作用是删除空缺值所在行或者列,这篇写得挺清晰的,不再展开了。
另外多写一句,df.dropna()是删除所有包含NaN的行,相当于参数全部默认,其中这个参数inplace: 默认False,即筛选后的数据存为副本,True表示直接在原数据上更改。
fillna()用法介绍用特殊值0、中位数、平均数、字典、临近值进行填充,写的挺清晰,不再展开了。
2.2、重复值观察与处理
#查看重复值
df[df.duplicated()]
#重复值处理
#以下是对整个行有重复值的清理的方法举例:
df = df.drop_duplicates()
df.head()
#将前面清洗的数据保存为CSV格式
df.to_csv('test_clear.csv')
重复值处理,这篇博客写得挺清晰,不展开了。