9.9学习笔记(数据清洗)

  • 转换变量
  • 填充缺失值
  • 异常值、噪声值处理
  • 重复值处理
  • 删除不必要的列(属性
  • 干净(X->Y)数据集

缺失值处理

import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer

#填充缺失值
data=pd.DataFrame(np.random.randn(6,4),columns=['col1','col2','col3','col4'],index=['a','b','c','d','e','f'])
##1
print("Data原始数据:")
print(data)
#切片 提取 1:2左闭右开增加缺失值,区别loc ix
data.iloc[1:2,1]=np.nan
data.iloc[4,3]=np.nan
##2
print("查看增加了缺失值后的数据:")
print(data)
#查看缺失值 true即为缺失
nan_all=data.isnull()
##3
print("查看包含了缺失值的列:")
print(nan_all)
#获得含有na的列
nan_lie=data.isnull().any()
#获得全部为na的列
nan_lielie=data.isnull().all()
##4
print("某列有一个缺失值:")
print(nan_lie)
##5
print("某列全部都是缺失值:")
print(nan_lielie)
#直接丢弃缺失值
data2=data.dropna()
#使用sklearn将缺失值替换为特定值
#先建立替换规则,默认均值,还可以是中位数(median)或众数(most_frequent)或四分位数等,axis默认0,使用列计算逻辑(类似取列的均值)
nan_model=Imputer(missing_values='NaN',strategy='mean',axis=0)
#应用规则
nan_result=nan_model.fit_transform(data)
##6
print("sklearn Imputer填充后的结果:")
print(nan_result)
#使用pandas将缺失值替换为特定值,用后面的值替换,若要用前面的值替换则是pad
pd1=data.fillna(method='backfill')
print("pandas backfill填充后的结果:")
print(pd1)
#用后面的值替换,限制每列只能替换一个缺失值
pd2=data.fillna(method='bfill',limit=1)
#用0替换
print("缺失值置0")
pd3=data.fillna(0)
##7
print(pd3)
#用不同值替换不同列的缺失值
print("人为选择特定值:")
pd4=data.fillna({'col2':1.1,'col4':1.2})
print(pd4)
#选择各列的均值替换
pd5=data.fillna(data.mean()['col2':'col4'])
print("选择各列的均值替换:")
print(pd5)

结果:
Data原始数据:
col1 col2 col3 col4
a -0.267957 -0.173783 1.105459 -2.299110
b 0.882486 0.647426 -0.522720 1.735847
c -0.050480 -1.181000 0.147767 2.251265
d -0.389427 -1.245803 -0.277962 -0.334298
e -0.525834 1.540179 1.228781 0.647091
f -1.568139 -2.135816 1.354958 1.319530
查看增加了缺失值后的数据:
col1 col2 col3 col4
a -0.267957 -0.173783 1.105459 -2.299110
b 0.882486 NaN -0.522720 1.735847
c -0.050480 -1.181000 0.147767 2.251265
d -0.389427 -1.245803 -0.277962 -0.334298
e -0.525834 1.540179 1.228781 NaN
f -1.568139 -2.135816 1.354958 1.319530
查看包含了缺失值的列:
col1 col2 col3 col4
a False False False False
b False True False False
c False False False False
d False False False False
e False False False True
f False False False False
某列有一个缺失值:
col1 False
col2 True
col3 False
col4 True
dtype: bool
某列全部都是缺失值:
col1 False
col2 False
col3 False
col4 False
dtype: bool
sklearn Imputer填充后的结果:
[[-0.26795733 -0.17378291 1.10545928 -2.29911037]
[ 0.88248555 -0.63924441 -0.52272023 1.73584738]
[-0.05047964 -1.18099987 0.1477671 2.25126495]
[-0.38942736 -1.24580263 -0.2779615 -0.33429786]
[-0.52583428 1.5401792 1.2287805 0.53464677]
[-1.56813866 -2.13581581 1.354958 1.31952978]]
pandas backfill填充后的结果:
col1 col2 col3 col4
a -0.267957 -0.173783 1.105459 -2.299110
b 0.882486 -1.181000 -0.522720 1.735847
c -0.050480 -1.181000 0.147767 2.251265
d -0.389427 -1.245803 -0.277962 -0.334298
e -0.525834 1.540179 1.228781 1.319530
f -1.568139 -2.135816 1.354958 1.319530
缺失值置0
col1 col2 col3 col4
a -0.267957 -0.173783 1.105459 -2.299110
b 0.882486 0.000000 -0.522720 1.735847
c -0.050480 -1.181000 0.147767 2.251265
d -0.389427 -1.245803 -0.277962 -0.334298
e -0.525834 1.540179 1.228781 0.000000
f -1.568139 -2.135816 1.354958 1.319530
人为选择特定值:
col1 col2 col3 col4
a -0.267957 -0.173783 1.105459 -2.299110
b 0.882486 1.100000 -0.522720 1.735847
c -0.050480 -1.181000 0.147767 2.251265
d -0.389427 -1.245803 -0.277962 -0.334298
e -0.525834 1.540179 1.228781 1.200000
f -1.568139 -2.135816 1.354958 1.319530
选择各列的均值替换:
col1 col2 col3 col4
a -0.267957 -0.173783 1.105459 -2.299110
b 0.882486 -0.639244 -0.522720 1.735847
c -0.050480 -1.181000 0.147767 2.251265
d -0.389427 -1.245803 -0.277962 -0.334298
e -0.525834 1.540179 1.228781 0.534647
f -1.568139 -2.135816 1.354958 1.319530

异常值:有固定业务规则的可以套用业务规则,没有固定业务规则的可以采用常见的数学模型判断

  • 基于概率分布的模型(如正态分布的标准差范围)
  • 基于聚类的方法(如KMeans)
  • 基于密度的方法(如LOF)基于分类的方法(如KNN)
  • 基于统计的方法(如分位数法)等
发布了5 篇原创文章 · 获赞 2 · 访问量 2672

猜你喜欢

转载自blog.csdn.net/weixin_43621813/article/details/100662780