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)