pandas:数据清洗之数据预处理(学习笔记)

数据清洗一般有以下四个部分:1.重复值处理;2.缺失值处理;3.异常值处理;4.数据离散化处理

一.重复值处理:

一般重复值采取删除,特殊情况例外,具体根据业务数据决定,以下就是重复值处理的一些代码:

1 df[df.duplicated()]#整个数据集中完全重复的
2 df[df.duplicate()==False]#除去完全重复的
3 np.sum(df.duplicated()) #统计重复的数量
4 df.drop_duplicates(inplace = True)#除去重复的,与2等价
5 df.drop_duplicates(subset=['列名1','列名2'],inplace = True)#删除某列重复的
6 any(df.duplicated()) 判断是否有重复值 返回TRUE就是有重复值,false就是没有

二.缺失值处理:

根据实际情况而定,有删除法、替换法(均值替换、前向、后向或者常数替换法)或者插值法等,前向替换就是用缺失值所在的行的前一行的那个数据替换,后向替换就是后一个数据替换;代码实现如下:

1 data.apply(lambda x: sum(x.isnull())/len(x),axis = 0) #看每列缺失值的比例
2 data.count()/data.shape[0] #非缺失值的比例
3 data['列名'].fillna(data['列名'].mean())
4 data.fillna(method = 'pad'/'ffill') #前向填充:用前一个非缺失值去填充该缺失值
5 data.fillna(method = 'backfill' / 'bfill') #后向填充:用后一个非缺失值填充
6 data.fillna(value = {'列名1':data['列名1'].mean(),'列名2':'0'},inplace=True)#多列填充

三.异常值处理:

指一组数据中偏离正常范围的值,不是错误值;异常值出现频率较低,但会对实际项目分析造成偏差。异常值一般用箱型图(分位差法)或者分布图(标准差法)来判断;

标准差法:一组数据的上界一般等于μ+2*σ(2.5*σ、3*σ),下界等于μ-2*σ(2.5*σ、3*σ)等这个方法判断;

箱型图法:分位差=3/4分位数-1/4分位数;上界则是3/4分位数+1.5*分位差,下界则是1/4分位数-1.5*分位差。

往往采取盖帽法或者数据离散化。相关代码如下:

#标准差法
upline = df['money'].mean()+2.5*df['money'].std()  #上界
lowline = df['money'].mean()-2.5*df['money'].std() #下界
outlines = df[(df['money']>upline) | (df['money']<lowline)] #异常点

#箱型图法
df.describe() #整体描述数据
IQR=df.quantile(0.75)-df.quantile(0.25)
upline = df.quantile(0.75) + 1.5*IQR
lowline = df.quantile(0.25)- 1.5*IQR

#绘图
import matplotlib.pyplot as plt
df['money'].plt(kind='box') #箱型图
df['money'].plt(kind='hist',bins=30,density=True) #分布图
df['money'].plt(kind='kde')
plt.show()

四.数据离散化

等同于分箱:一般有等频分箱或等宽分箱,一般使用pd.cut()或者pd.qcut(),代码如下:

pd.cut(x,bins,right=True,labels)
x:数据
bins:离散化的数目,或者区分的区间
right=True:代表左开右闭
labels:离散化后各个类别的标签
df['score_bin']=pd.cut(df['score'],bins=5,labels=range(5)) #等宽分箱
df['score_bin'].value_counts().plot(kind='bar')
#自定义分割
w = [100,1000,10000,20000]
df['score_bin']=pd.cut(df['score'],bins=w,labels=range(3))

#等频分段
k=5
w=[1.0*i/k fro i in range(k+1))
pd.qcut(df['score'],q = w)
分位点:
k=5
w1 = df['score'].quantile([1.0*i/k fro i in range(k+1)])
w1[0]=w1[0]*0.95    最小更小
w1[1.0]=w1[1.0]*1.1 最大更大

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值