Pandas数据清洗方法
Posted liyiyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas数据清洗方法相关的知识,希望对你有一定的参考价值。
一.重复值处理:直接删除为主。一般先处理重复行,再处理唯一值列。
以行为单位,查看重复值
df[df.duplicated()]
以行为单位,删除重复值
df.drop_duplicates()
以某列(如ID)为单位,查看重复值
df[df.duplicated(‘ID‘)]
以某列(如ID)为单位,删除重复值
df.drop_duplicated(‘ID‘)
二.缺失值处理:主要根据业务经验填补。
少于20%的连续变量用均值、中位数填补,分类变量用众数填补,也可以不用填补单算一类;
20%-80%填补或者生产指示哑变量;
80%以上,使用指示哑变量,不使用原始变量。
查看缺失比例情况
df.apply(lambda x:sum(x.isnull())/x.size)
以指定值填补(均值、中位数、众数)
df[‘col‘].fillna(df[‘col‘].mean())
df[‘col‘].fillna(df[‘col‘].median())
df[‘col‘].fillna(df[‘col‘].mode()[0])
生产指示哑变量
df[‘col_new‘] = df[‘col‘].isnull().apply(int)
三.离群值处理:离群值会干扰模型结果。单变量用盖帽法、分箱法;多变量用聚类法。
盖帽法:将某连续变量均值上下三倍标准差范围外的记录替换为均值上下三倍标准差;也可以自定义分位数函数。
函数1:
def exclude_extreme(s):
# x:pd.Series列,连续变量
mean = s.mean()
sigma = s.std()
ceiling = mean + 3 * sigma
floor = mean - 3 * sigma
s_copy = s.copy()
s_copy[s_copy > ceiling] = ceiling
s_copy[s < s_copy] = floor
return s_copy
函数2:自定义分位数
def cap(x,quantile=[0.01,0.99]):
"""
:arg
x:pd.Series列,连续变量
quantile:制定盖帽法的上下分位数范围
"""
Q01,Q99 = x.quantile(quantile).values.tolist()
if Q01 > x.min():
x = x.copy()
x.loc[x<Q01] = Q01
if Q99 < x.max():
x.loc[x>Q99] = Q99
return x
分箱法:将离群值包含在箱子中,在进行建模的时候不直接进行到模型中,可以达到处理离群值的目的。
等宽分箱:cut函数,必须输入待分箱的列及分箱个数两个参数,labels可选。下限为列最小值,上限为列最大值,产生一个Cat类的新列,labels可以指定数值或字符串对替代区间值。
pd.cut(df[‘col‘],bins=?,labels=[?,?,?,...])
等深分箱:qcut函数,必须输入待分箱的列及分箱个数两个参数,labels可选。下限为列最小值,上限为列最大值,产生一个Cat类的新列,labels可以指定数值或字符串对替代区间值。
pd.qcut(df[‘col‘],bins=?,labels=[?,?,?,...])
或使用分位数进行分箱,如分为2箱
df[‘col‘].quantile([0,0.5,1]) # 显示最小值,中位值、最大值
pd.cut(df[‘col‘],bins=df[‘col‘].quantile([0,0.5,1]) ,labels=[?,?,?,...],include_lowest=True) # include_lowest=True 表示包含边界最小值。
以上是关于Pandas数据清洗方法的主要内容,如果未能解决你的问题,请参考以下文章