复习自用7:pandas数据预处理

Part_1 合并数据

#1.堆叠合并数据——concat函数

#1.1 横向表堆叠

df1=detail.iloc[:,:10]
df2=detail.iloc[:,:10]
print(df1.shape,df2.shape)    #查看合并前的shape

pd.concat([df1,df2],axis=0,join='inner')    #内连接
pd.concat([df1,df2],axis=0,join='outer')    #外连接


#1.2 纵向表堆叠

pd.concat([df1,df2],axis=1,join='inner')    #使用concat,内连接
pd.concat([df1,df2],axis=1,join='outer')    #使用concat,外连接

df1.append(df2)    #使用append方法需要列名完全一致
df3=pd.append(df1,df2)




#2.主键合并数据

df3=pd.merge(df1,df2,how='inner',left_on='key1',right_on='key2')    #merge函数

df3=pd.join(df1,df2,how='left')    #join方法:how='left'/'right'/'inner'/'outer'
df3=df1.join(df2,on='key',rsuffix='1')




#3. 重叠合并数据——combine_first方法

df3=df1.combine_first(df2)

PART_2 清洗数据

#1. 检测与处理重复值

#1.1 记录重复

#“创建list+循环”
#利用set的元素唯一性,或者
pd.drop_duplicates(df1,keep='first',inplace='False')
df4=df1['a'].drop_duplicates


#1.2 特征重复
#构建相似度矩阵
df4=df1['a','b'].corr(method='kendall')    #method='pearson'/'spearson'/'kendall'

#通过DataFrame.equals
def FeatureEquals(df):
    dfEquals=pd.DataFrame([],columns=df.columns,index=df.columns)
    for i in df.columns:
        for j in df.columns:
            dfEquals.loc[i,j]=df.loc[:,i].equals(df.loc[:,j])
    return deEquals

detEquals=FeatureEquals(detail)


#2. 检测与处理缺失值

#利用isnull或notnull找到缺失值
detail.isnull().sum()
detail.notnull().sum()

#删除
detail.dropna(axis=0,how='any')    #how='any'有一个缺失就删除/'all'全缺失才删除

#替换
detail.fillna(0)

#线性插值
import numpy as np
from scipy.interpolate import interpld
x=np.array([1,2,3,4,5,8,9])
y1=np.array([3,5,7,9,11,45,78])
y2=np.array([4,9,16,25,36,49,64])
LinearInsValue1=interpld(x,y1,kind='linear')
LinearInsValue2=interpld(x,y2,kind='linear')
print(LinearInsValue1[6])
print(LinearInsValue2[6])

#拉格朗日插值
import scipy.interpolate impoet lagrange
LargeInsValue1=lagrange(x,y1)
LargeInsValue2=lagrange(x,y2)
print(LargeInsValue1[6])
print(LargeInsValue2[6])



#3. 检测与处理异常值

# 3sigma
# 箱线图

import matpltlib.pyplot as plt
plt.figure(figsize=(10,8))
p=plt.boxplot(detail['counts'].values,botch=True)

PART_3 标准化数据

自定义函数标准化:离差标准化、小数定标标准化

#自定义离差标准化

def MaxMinScale(data):
    data=(data-data.min())/(data.max()-data.min())
    return data

#自定义标准差标准化

def StandardScaler(data):
    data=(data-data.mean())/data.std()
    return(data)

#小数定标标准化

def DecimalScaler(data):
    data=data/10**np.ceil(np.log10(data.abs().max()))
    return data

PART_4 转换数据

#1. 哑变量处理——get_dummies函数

dummy_detail=get_dummies(detail)

#2. 离散化连续型数据

#等宽法
price=pd.cut(detail['a'],5)
print(price.value_counts())

#等频法:自定义函数
def SameRateCut(data,k):
    w=data.quantile(np.arange(0,1+1.0/k,1.0/k))
    data=pd.cut(data,w)
    return(data)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值