3.1缺失值处理
缺失值就是由某些原因导致部分数据为空,对于为空的这部分数据我们一般有两种处理方式,一种是删除,即把含有缺失值的数据删除;另一种是填充,即把缺失的那部分数据用某个值代替。
3.1.1 缺失值查看
缺失值进行处理,首先要把缺失值找出来,也就是查看哪列有缺失值。
在 Python 中直接调用 info()方法就会返回每一列的缺失情况。

我们还可以用isnull()方法来判断哪个值是缺失值,如果是缺失值则返回True,如果不是缺失值则返回False。

3.1.2 缺失值删除
缺失值分为两种,一种是一行中某个字段是缺失值;另一种是一行中的字段全部为缺失值,即为一个空白行。
在 Python 中,我们利用的是 dropna()方法,dropna()方法默认删除含有缺失值的行,也就是只要某一行有缺失值就把这一行删除。

运行dropna()方法以后,删除含有NaN值的行,返回删除后的数据。如果想删除空白行,只要给dropna()方法传入一个参数how = all即可,这样就会只删除那些全为空值的行,不全为空值的行就不会被删除。

3.1.3 缺失值填充
上面介绍了缺失值的删除,但是数据是宝贵的,一般情况下只要数据缺失比例不是过高(不大于30%),尽量别删除,而是选择填充。
在Python中,我们利用的fillna()方法对数据表中的所有缺失值进行填充,在fillna后面的括号中输入要填充的值即可。

在 Python 中我们也可以按不同列填充,只要在 fillna()方法的括号中指明列名即可。

上面代码中只针对性别这一列进行了填充,其他列未进行任何更改。也可以同时对多列填充不同的值:

3.2 重复值处理
重复数据就是同样的记录有多条,对于这样的数据我们一般做删除处理。
在Python中我们利用drop_duplicates()方法,该方法默认对所有值进行重复值判断,且默认保留第一个(行)值。

上面的代码是针对所有字段进行的重复值判断,我们同样也可以只针对某一列或某几列进行重复值删除的判断,只需要在drop_duplicates()方法中使用subset参数指明要判断的列名即可。

也可以利用多列去重,只需要把多个列名以列表的形式传给参数subset即可。比如按姓名和唯一识别码去重。
还可以自定义删除重复项时保留哪个,默认保留第一个,也可以设置保留最后一个,或者全部不保留。通过传入参数keep进行设置,参数keep默认值是first,即保留第一个值;也可以是last,保留最后一个值;还可以是False,即把重复值全部删除。
3.3 异常值的检测与处理
异常值就是相比正常数据而言过高或过低的数据,比如一个人的年龄是0岁或者300岁都算是一个异常值,因为这和实际情况差距过大。
3.3.1异常值检测
要处理异常值首先要检测,也就是发现异常值,发现异常值的方式主要有以下三种。
● 根据业务经验划定不同指标的正常范围,超过该范围的值算作异常值。
● 通过绘制箱形图,把大于(小于)箱形图上边缘(下边缘)的点称为异常值。
● 如果数据服从正态分布,则可以利用3σ 原则;如果一个数值与平均值之间的偏差超过3倍标准差,那么我们就认为这个值是异常值。
5.3.2 异常值处理
对于异常值一般有以下几种处理方式。
● 最常用的处理方式就是删除。
● 把异常值当作缺失值来填充。
● 把异常值当作特殊情况,研究异常值出现的原因。
Python中是通过过滤的方法对异常值进行删除。比如 df 表中有年龄这个指标,要把年龄大于200的值删掉,你可以通过筛选把年龄不大于200的筛出来,筛出来的部分就是删除大于200的值以后的新表。对异常值进行填充,就是对异常值进行替换,利用replace()方法可以对特定的值进行替换。
3.4 数据类型转换
3.4.1 数据类型
Pandas主要有6种数据类型,如下表所示。
| 类型 | 说明 |
|---|---|
| int | 整型数,即整型 |
| float | 浮点数,即含有小数点的数 |
| object | Python对象类型,用O表示 |
| string_ | 字符串类型,经常用S表示,S10表示长度为10的字符串 |
| unicode_ | 固定长度的unicode类型,跟字符串定义方式一样 |
| datatime64[ns] | 表示时间格式 |
在 Python 中,不仅可以用 info()方法获取每一列的数据类型,还可以通过 dtype方法来获取某一列的数据类型。

3..4.2 类型转换
在Python中,我们利用astype()方法对数据类型进行转换,astype后面的括号里指明要转换的目标类型即可。

3.5 索引设置
索引是查找数据的依据,设置索引的目的是便于我们查找数据。
3.5.1 为无索引表添加索引
有的表没有索引,这时要给这类表加一个索引。
通过给表df的columns参数传入列索引值,index参数传入行索引值达到为无索引表添加索引的目的。


3.5.2 重新设置索引
重新设置索引,一般指行索引的设置。有的表虽然有索引,但不是我们想要的索引,比如现在有一个表是把序号作为行索引,而我们想要把订单编号作为行索引,该怎么实现呢?
在Python中可以利用set_index()方法重新设置索引列,在set_index()里指明要用作行索引的列的名称即可。
3.5.3 重命名索引
在Python中重命名索引,我们利用的是rename()方法,在rename后的括号里指明要修改的行索引及列索引名。

3.5.4 重置索引
重置索引主要用在层次化索引表中,重置索引是将索引列当作一个columns进行返回。
在Python利用的是reset_index()方法,reset_index()方法常用的参数如下:
reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=’’)
level:level参数用来指定要将层次化索引的第几级别转化为columns,第一个索引为0级,第二个索引为1级,默认为全部索引,即默认把索引全部转化为columns。
drop:是否保留原索引,默认false保留原索引,true则新建索引。在多个dataframe合并时,经常会用到reset_index的drop功能
inplace:是否新建dataframe,默认false创建新的dataframe,为true时修改原dataframe。
