数据分析缺失值处理
#-*-coding:utf-8-*-
import pandas as pd
from numpy import np
#加載數據
data=pd.read_excel('./qs.xlsx')
#如何確定數據里面含有缺失值--缺失值檢測
#推薦使用insnull+sum來判斷缺失值
print(data.isnull.sum())#有值false,無值true
print(data.ntnull().sum())
#刪除法-dropna,遇到缺失值就刪除-按行、按列
#axis指定刪除的軸
#how指定刪除的方式--
# any只要有缺失值就刪除
#all只有整列或整行都是缺失值才刪除
#inplace指定是否對原來產生影響
data.dropna(axis=0,how='any',inplace=False)
#對于刪除法容易改變數據結構,容易造成大量數據丟失
#只有行或列大部分為缺失值,或者數據不重要,才刪除
#填充法
#對于數值型數據可以均值、中位數、眾數填充
#對于類別型數據用眾數來填充
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[:,'門店編號'].mode()[0]
data.loc[:,'門店編號'].fillna(value=mode,inplace=True)
#只要填充之后對結果影響不是很大的情況下,就可以使用
#*,如果是一些不能直接處理的缺失值,先轉化為能處理的缺失值
#這里的缺失值--np.nan類型--float類型
data.replace(to_replace='*',value=np.nan,inplace=True)
#刪除、填充都能進行
#插值法
#給合適的位置插上合適的值
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])
#線性插值、多項式插值、樣條插值
#線性插值--擬合線性關系進行插值
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]))
#多項式插值-牛頓插值法、拉格朗日插值法
#擬合牛頓多項式與拉格朗日多項式
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]
#樣條插值--擬合曲線關系進行插值
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])))
#對于線性關系的數據--線性插值比較準確,多項式插值與線性插值都不錯
#對于非線性數據--線性插值效果較差,多項式插值有樣條插值效果較好
# 如果非線性關系的數據,--推薦使用多項式插值
總結
- 上一篇: 数据分析数据拼接案例
- 下一篇: 数据分析数据标准化