首页 > 编程语言 > 详细

python基础之数据清洗

时间:2021-01-27 14:25:12      阅读:53      评论:0      收藏:0      [点我收藏+]

一、重复值

  1、重复值判断

od.duplicated(
    subset: Union[Hashable, Sequence[Hashable], NoneType] = None,   #判断依据列,列表传入
    keep: Union[str, bool] = first,   #判断模式first/last/False  
) -> Series

  2、重复值删除

od.drop_duplicates(
    subset: Union[Hashable, Sequence[Hashable], NoneType] = None,    #删除依据列,列表传入
    keep: Union[str, bool] = first,   #first保留首行,last保留尾行,False不保留
    inplace: bool = False,    #是否更改原对象
    ignore_index: bool = False,    #是否重置索引
) -> Union[ForwardRef(DataFrame), NoneType]

 

二、缺失值

  1、缺失值判断:isnull/notnull, 返回bool值;

  2、插入缺失值:可以使用 None 等方法将内容修改为缺失值:

s.loc[0] = None
s.loc[1] = np.nan
df.two = pd.NA

  3、缺失值处理:

  • dropna: 丢弃,删除缺失值

    • axis: 删除行还是列,{0 ro ‘index‘, 1 or ‘columns‘}, default 0

    • how: 如果等于any则任何值为空都删除,如果等于all则所有值都为空时才删除

    • inplace: 如果为True则修改当前df, 否则返回新的df

  • fillna: 填充空值

    • value: 用于填充的值,可以是单个值,或者字典(key是列名,value是值)

    • method: 等于ffill使用前一个部位空的值填充forword fill; 等于bfill使用后一个部位空的值天充backword fill,也可使用线性或分步等插值方法

    • axis: 按行还是按列填充,{0 ro ‘index‘, 1 or ‘columns‘}

    • inplace: 如果为True则修改当前df, 否则返回新的df

 

三、异常值

  1、异常值判断:

    ①均值-标准差判断:例均值上下三个标准差以内为正常值

#均值—标准差检测:均值加减3个标准差为正常范围
xbar = od[重量].mean()   #均值
xstd = od[重量].std()   #标准差
ub = xbar + 3*xstd
lb = xbar - 3*xstd
print(均值:%.2f  标准差:%.2f  上界:%.2f  下界:%.2f%(xbar,xstd,ub,lb))
if any(od[重量]>ub)==True:
    print(上界以上出现异常值)
    if any(od[重量]<lb)==True:
        print(下界以下出现异常值)
else:
    print(均值-标准差检测:无异常) 
均值:
12.05 标准差:59.01 上界:189.07 下界:-164.97 上界以上出现异常值

    ②箱线法:例四分位数上下1.5个分位差为正常值

#箱线法检测:上四分位数加1.5个分位差以上,及下四分位数减1.5分位差以下为异常值
Q1 = od[重量].quantile(q=0.25)   #下四分位数
Q3 = od[重量].quantile(q=0.75)   #上四分位数
IQR = Q3 - Q1    #分位差
ub = Q3 + 1.5*IQR   #上界
Lb = Q1 - 1.5*IQR   #下界
print(下四分位数:%.2f  上四分位数:%.2f  上界:%.2f  下界:%.2f%(Q1,Q3,ub,lb))
if any(od[重量]>ub)==True:
    print(上界以上出现异常值)
    if any(od[重量]<lb)==True:
        print(下界以下出现异常值)
else:
    print(箱线法检测:无异常) 
下四分位数:
0.60 上四分位数:5.80 上界:13.60 下界:-164.97 上界以上出现异常值

  2、异常值处理

    ①根据实际情况

    ②填充最接近上下界的数据;

    ③超出百分之一分位数与百分之九十九分位数的,填充为这两个分位数

 

四、数据离散化【分箱/分段/分级】

  1、等宽分段:按照数据范围分为几层,如0-1、1-2、2-3,数据范围相等,落到各段的数据个数相差可能巨大

#等宽分箱 分四份
od[等宽分箱] = pd.cut(od[去异常重量],4,labels=range(1,5))
od.loc[:,[包裹号,去异常重量,等宽分箱]].sort_values([去异常重量],ascending=False)

od[等宽分箱].value_counts()

1    5449
2     165
4      95
3      63
Name: 等宽分箱, dtype: int64

  2、等频分段:按照数据点分布频率划分数据范围,各段包含的数据点基本一致

#等频分箱
k=4
pd.qcut(od[去异常重量],q=[i/k for i in range(k+1)],labels=range(1,k+1)).value_counts()

2    1523
1    1487
4    1419
3    1343
Name: 去异常重量, dtype: int64

  3、cut—qcut

pd.cut(
    x,   #输入待cut的一维数组
    bins,   #cut的段数,一般为整型,但也可以为序列向量(若不在该序列中,则是NaN)
    right: bool = True,   #布尔值,确定右区间是否开闭,取True时右区间闭合
    labels=None,   #数组或布尔值,用来标识分后的bins,长度必须与结果bins相等,各个级别的名称
    retbins: bool = False,   #布尔值,可选。是否返回数值所在分组,Ture则返回
    precision: int = 3,    #整型,bins小数精度,也就是数据以几位小数显示
    include_lowest: bool = False,
    duplicates: str = raise,
)

 

pd.qcut(
    x,   #待cut的一维数组
    q,    #段数
    labels=None,    #各级别名称
    retbins: bool = False,
    precision: int = 3,
    duplicates: str = raise,
)

 

python基础之数据清洗

原文:https://www.cnblogs.com/5947l/p/14309471.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!