数据分析缺失值处理
#-*-coding:utf-8-*-
import pandas as pd
from numpy import np
#加載數(shù)據(jù)
data=pd.read_excel('./qs.xlsx')
#如何確定數(shù)據(jù)里面含有缺失值--缺失值檢測
#推薦使用insnull+sum來判斷缺失值
print(data.isnull.sum())#有值false,無值true
print(data.ntnull().sum())
#刪除法-dropna,遇到缺失值就刪除-按行、按列
#axis指定刪除的軸
#how指定刪除的方式--
# any只要有缺失值就刪除
#all只有整列或整行都是缺失值才刪除
#inplace指定是否對原來產(chǎn)生影響
data.dropna(axis=0,how='any',inplace=False)
#對于刪除法容易改變數(shù)據(jù)結(jié)構(gòu),容易造成大量數(shù)據(jù)丟失
#只有行或列大部分為缺失值,或者數(shù)據(jù)不重要,才刪除
#填充法
#對于數(shù)值型數(shù)據(jù)可以均值、中位數(shù)、眾數(shù)填充
#對于類別型數(shù)據(jù)用眾數(shù)來填充
mode=data.loc[:,'商品ID'].mode()[0]
data.loc[:,'商品ID'].fillna(value=mode,inplace=True)
mode=data.loc[:,'類別ID'].mode()[0]
data.loc[:,'類別ID'].fillna(value=mode,inplace=True)
mode=data.loc[:,'門店編號(hào)'].mode()[0]
data.loc[:,'門店編號(hào)'].fillna(value=mode,inplace=True)
#只要填充之后對結(jié)果影響不是很大的情況下,就可以使用
#*,如果是一些不能直接處理的缺失值,先轉(zhuǎn)化為能處理的缺失值
#這里的缺失值--np.nan類型--float類型
data.replace(to_replace='*',value=np.nan,inplace=True)
#刪除、填充都能進(jìn)行
#插值法
#給合適的位置插上合適的值
x=np.array([1,2,3,4,5,8,9])
y=np.array([3,5,7,9,11,17,19])
z=np.array([2,8,18,32,50,128,162])
#線性插值、多項(xiàng)式插值、樣條插值
#線性插值--擬合線性關(guān)系進(jìn)行插值
from scipy.interpolate import interp1d
line1=interp1d(x,y,kind='linear')
line2=interp1d(x,z,kind='linear')
print(line1([6,7]))
print(line2([6,7]))
#多項(xiàng)式插值-牛頓插值法、拉格朗日插值法
#擬合牛頓多項(xiàng)式與拉格朗日多項(xiàng)式
from scipy.interpolate import lagrange
la1=lagrange(x,y)
la2=lagrange(x,z)
print(la1([6,7]))#[13,15]
print(la2([6,7]))#[72,98]
#樣條插值--擬合曲線關(guān)系進(jìn)行插值
from scipy.interpolate import spline
print(spline(xk=x,yk=y,xnew=np.array([6,7])))
print(spline(xk=x,yk=z,xnew=np.array([6,7])))
#對于線性關(guān)系的數(shù)據(jù)--線性插值比較準(zhǔn)確,多項(xiàng)式插值與線性插值都不錯(cuò)
#對于非線性數(shù)據(jù)--線性插值效果較差,多項(xiàng)式插值有樣條插值效果較好
# 如果非線性關(guān)系的數(shù)據(jù),--推薦使用多項(xiàng)式插值
總結(jié)
- 上一篇: 数据分析数据拼接案例
- 下一篇: 数据分析数据标准化