datacombo重复值的处理_Part27:基于pandas的数据清洗-处理空值、重复值和异常值

112c4775a117dc94ddf84b94d906c21e.png

一、处理空值

1.有两种空值:

    • None--对象类型
    • np.nan(NaN)--浮点类型
  • 两种空值的区别 :是否可以参与运算
import numpy as np
import pandas as pd
from pandas import DataFrame

为什么数据分析中需要用到的是浮点类型而不是对象类型?

  • 数据分析中常常会使用某些形式的运算处理原始数据,如果原始数据中空值为NAN,可以参与运算,但是none不能参与运算。所以在pandas中如果遇到了none形式的空值,pandas会将其强行转化为NAN的形式。

6e00a78637b0d461d9bfaa96e0ad0eba.png

2.pandas如何处理空值?

  • isnull()+any()有空值就返回true
  • notnull()+all()检测表中是否存在空值
  • dropna
  • fillna
  • 处理方式:
    • 1.删除空所对应的行数据
    • 2.对空值进行赋值
#不管赋值的时候是none还是np.nan,都会转化为np.nan类型输出
df=DataFrame(data=np.random.randint(0,100,size=(8,7)))
df.iloc[2,3]=None
df.iloc[5,2]=np.nan
df.iloc[6,4]=None
df

7ed714f45f7bb671d8b585562e9cae09.png

(1).对数据进行删除,3种方式

#方式一:df.loc[df.notnull().all(axis=1)]

#使用notnull()判断空值
df.notnull()

a48de8e9eb87b54993fddc203a19ecea.png
#找到空值所对应的行,使用all()
df.notnull().all(axis=1)#axis=0表示列,=1表示行

b620e229628a17fe8186103db901c5e5.png
#将all()函数的结果作为索引取出符合要求的行
df.loc[df.notnull().all(axis=1)]

11a3dfc9baa725fa5ef71f2306cc05f9.png

#方式二:df.loc[~df.isnull().any(axis=1)]

df.isnull()

3ae68016d3416ea1f0c611375d703470.png
df.isnull().any(axis=1)

459ba859ab006c42ef9a6c3d7a8dc1b4.png
~df.isnull().any(axis=1)#该步骤的目的也是准备用true值作为索引,所以~df.isnull().any()和df.notnull().all(axis=1)等价
df.loc[~df.isnull().any(axis=1)]

518325930e8bde901638a5e0815a33db.png

#方法三:dropna(axis=0),直接删除数据表中存在空值的行

df.dropna(axis=0)

b7c873b828aa51b236f6a557a25df99a.png

(2).对数据进行填充fillna()

  • 使用空值的近邻值对数据进行填充fillna(method='ffill',axis=0)

6ea0d0945368b2c1c7aa68a2c49fd24b.png
df.fillna(method='ffill',axis=0)#axis=0表示在列,ffill表示用前一个数填充,整体表示在列上用前一个数填充。
#method还可以使用'bfill'

33749fd8020b5636794cdd3564372715.png

思考:什么时候删除空值行,什么时候填充行?

  • 如果删除成本不高,那就填充行

二、处理重复值(行数据重复)

df=DataFrame(data=np.random.randint(0,100,size=(8,6)))
df

e0d2b422c453b3ec0d65e6486fc98bef.png
df.iloc[2]=[2,3,4,4,4,3]
df.iloc[5]=[2,3,4,4,4,3]
df.iloc[7]=[2,3,4,4,4,3]
df

ef182ce0c69d5f06401eeea386f58e5f.png
df.drop_duplicates(keep='first')#keep值可以是first,也可以是last

fe6c267ac298e08e4d770cc22fbd6f64.png

三、处理异常值

  • 自定义一个1000行3列(A,B,C)取值范围是0-1的数据源,然后将C列中大于两倍标准差的异常值作为异常值
df=DataFrame(data=np.random.random(size=(1000,3)),columns=['A','B','C'])
df.head()

7b9204b238bfe514a98a7c5e1540ea31.png
#定义异常值的标准:C列中大于两倍标准差的异常值
twice_std=2 * df['C'].std()
twice_std

522a70658631df5f72871451f3019faf.png
#判断C列的值是否是异常值,然后取反,利用索引去除异常值
df.loc[~(df['C'] > twice_std)]
df.head(5)

b6157e7f7c6b2cae40fc9b95beed386d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值