DW数据清洗及特征处理
数据清洗及特征处理可以让数据看起来规律性更强,为后面操作做铺垫。
我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗,本章我们将学习缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的亚子。
1 缺失值观察与处理
我们拿到的数据经常会有很多缺失值,比如我们可以看到Cabin列存在NaN,那其他列还有没有缺失值,这些缺失值要怎么处理呢
1.1 任务一:缺失值观察
(1) 请查看每个特征缺失值个数
(2) 请查看Age, Cabin, Embarked列的数据
以上方式都有多种方式,所以大家多多益善
#方法一
df.info()
#方法二
df.isnull().sum() #缺失值(为空)的个数
df.isna().sum() #缺失值的个数
输出一样
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
1.2 任务二:对缺失值进行处理
(1)处理缺失值一般有几种思路
(2) 请尝试对Age列的数据的缺失值进行处理
(3) 请尝试使用不同的方法直接对整张表的缺失值进行处理
#处理缺失值的一般思路:
#提醒:可使用的函数有--->dropna函数与fillna函数
#将空值怎么变成了NaN
df[df['Age'] == np.nan] = 0
df.loc[5:7,'Age']
#df[df['Age']==None]=0
df.loc[5:7,'Age']
5 NaN
6 54.0
7 2.0
Name: Age, dtype: float64
#age 是有空值,不是NaN,所以用isnull
df[df['Age'].isnull()] = 0 # 这是将一整行变成了0 是不对的
df.loc[5:7]
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
5 | 0 | 0 | 0 | 0 | 0 | 0.0 | 0 | 0 | 0 | 0.0000 | 0 | 0 |
6 | 7 | 0 | 1 | McCarthy, Mr. Timothy J | male | 54.0 | 0 | 0 | 17463 | 51.8625 | E46 | S |
7 | 8 | 0 | 3 | Palsson, Master. Gosta Leonard | male | 2.0 | 3 | 1 | 349909 | 21.0750 | NaN | S |
检索空缺值用np.nan要比用None好,数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan
#正解
"""
·dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
axis=0按行删除,1按列
how:'any','all'
thresh要求保留的非NA值个数 eg.thresh=2 仅保留至少具有2个非NA值的行/列
subset=['列名1', '列名2']定义要在哪些列中查找缺失值
inplace=True/False 为True时对原数据进行永久性修改
例子:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
"""
df.dropna(axis=0,how='any').head(3) #默认按行axis=0,方式any
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
---|