pandas之数据清洗

数据清洗

数据清洗分为三步:

重复值处理——删除(有几个相同就删除还是全部得相同)
缺失值处理——删除,填充(均值,众数,中位数,前后相邻值),插值(拉格朗日插值,牛顿插值)
异常值处理——describe进行描述性分析+散点图+箱型图定位异常值,处理方法:删除,视为缺失值

 

导入数据

 

1 import pandas as pd
2 import numpy as np
3 from pandas import Series,DataFrame 
4 test=pd.read_excel("/Users/yaozhilin/Downloads/exercise.xlsx",sep="t")
5 test.head(5)#显示前五行

 

 

 

•重复值处理

先查看表中重复值的数量

1 print(test.duplicated().value_counts())
False    189
True      16
dtype: int64


再用drop_duplicates(subset,keep,inplace)方法对某几列下面的重复行删除
subset:以哪几列作为基准列,判断是否重复,如果不写则默认所有列都要重复才算
keep: 保留哪一个,fist-保留首次出现的,last-保留最后出现的,False-重复的一个都不保留,默认为first
inplace: 是否进行替换,最好选择False,保留原始数据,默认也是False

1 test.drop_duplicates(subset=["工单号","ERPCO号"],keep="first",inplace=True) 
2 print(test.duplicated().value_counts())#再次查看重复值 
False    189
dtype: int64



•缺失值处理

isnull用于检测缺失值,返回bool值

1 test.isnull()

 

 

~删除缺失值

dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

axis: 删除行还是列,行是0或index,列是1或column,默认是行
subst: 删除某几列的缺失值,可选,默认为所有列
how: any or all,any表明只要出现1个就删除,all表示所有列均为na才删
thresh: 缺失值的数量标准,达到这个阈值才会删除
inplace: 是否替换

1 test_d=test.dropna(axis=0,how="any",inplace=False)#,inplace=False原数据保留
2 print(test.isnull().any())
工单号       False
ERPCO号    False
所属区域      False
产品类别      False
数量        False
金额        False
成本        False
订购日期      False
发票号       False
dtype: bool


~填充缺失值

fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None,**kwargs,
#method : {'backfill', 'bfill', 'pad', 'ffill', None}

value: 可以传入一个字符串或数字替代Na,值可以是指定的或者平均值,众数或中位数等
method: 有ffill(用前一个填充)和bfill(用后一个填充)两种
limit: 限定填充的数量
inplace: 是否直接在原文件修改
axis: 填充的方向,默认是0,按行填充

1 test.fillna(method="ffill",inplace=False).isnull().any()
工单号       False
ERPCO号    False
所属区域      False
产品类别      False
数量        False
金额        False
成本        False
订购日期      False
发票号       False
dtype: bool

对不同列用不同值填充
1 ft=test.fillna(value={"数量":test["数量"].mean(),"金额":test["金额"].median(),"成本":test["成本"].mean()},inplace=False)
2 ft.isnull().any()
工单号       False
ERPCO号    False
所属区域      False
产品类别      False
数量        False
金额        False
成本        False
订购日期      False
发票号       False
dtype: bool



•异常值处理

~异常值查找

describe()对统计字段进行描述性分析

1 test.describe()

 

图像观察

1 from matplotlib import pyplot as plt
1 plt.scatter(test["数量"], test["金额"])

 

 

箱型图

1 test.boxplot(column=['数量'])

 

 

 

1 test.boxplot(column=['金额'])

 

 

1 test.boxplot(column=['成本'])

 

 

 

异常值处理:删除或者填充合理的值

通常超过了上四分位1.5倍四分位距或下四分位1.5倍距离都算异常值。

1 a = test["数量"].quantile(0.75)
2 b = test["数量"].quantile(0.25)
3 c = test["数量"]
4 c[(c>=(a-b)*1.5+a)|(c<=b-(a-b)*1.5)]=np.nan
5 c.fillna(c.median(),inplace=True)
6 print(c.describe())
count    189.000000
mean     141.248677
std      129.366651
min        6.000000
25%       42.000000
50%      100.000000
75%      200.000000
max      525.000000
Name: 数量, dtype: float64

 

1 test.boxplot(column=['数量'])

 

亦或者是直接dropna删除也可

 

posted @ 2020-08-05 15:46  瑶池里  阅读(288)  评论(0编辑  收藏  举报