對於資料中缺失的值,可以有3種方法處理:
1.刪除。比如餐廳的營業額,有幾天去裝修了,確實沒營業,可以刪除
2.不處理:有一些模型可以將缺失值作為一種特殊的值,可以直接建模。
3.補上:
均值/中位數/眾數:一般情況吧
固定值:比如工資啊,補貼啊
最近臨插補:最近的值,相鄰的,補上
下面是拉格朗日插值法
原理可以參考下面的部落格
#-*- coding: utf-8 -*-
#拉格朗日插值**
import pandas as pd #匯入資料分析庫pandas
from scipy.interpolate import lagrange #匯入拉格朗日插值函式
inputfile = 'e:/pythonmaterial/chapter4/demo/data/catering_sale.xls'
#銷量資料路徑
outputfile = 'e:/pythonmaterial/chapter4/demo/data/sales.xls'
#輸出資料路徑
#data 為 dataframe 型別
data = pd.read_excel(inputfile) #讀入資料
#將異常值作為空值處理
data[u'銷量'][(data[u'銷量'] < 400) | (data[u'銷量'] > 5000)] = none
#過濾異常值,將其變為空值
#自定義列向量插值函式
#s為列向量,指的是資料表中的一列;n為被插值的位置;k為取前後的資料個數,預設為5,取這個數前面和後面的5個數來做,如果把全部資料集都放進去,算不過來
defployinterp_column
(s, n, k=5):
#range是從引數1到引數2-1
y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取數,此時y就是前5個數以及後5個數,總共10個數
#剔除空值,因為range之後,y可能會取到下標不在資料集中的位置,比如當n是0的時候,前面5個數是沒有的,
#或者在資料集中但本身就是空值的,這些值在y中都表示為none,所以去掉空之後,y就全部是有效值了
y = y[y.notnull()]
return lagrange(y.index, list(y))(n) #x列是y的下標,插值並返回插值結果
#逐個元素判斷是否需要插值
#首先從每一列開始判斷,一列一列的做
for i in data.columns:
#j表示這列中的每個元素,下標是0~len-1
for j in range(len(data)):
#為什麼j是放在後面的,我是沒搞懂
if (data[i].isnull())[j]: #如果為空即插值。
data[i][j] = ployinterp_column(data[i], j)
data.to_excel(outputfile) #輸出結果,寫入檔案
非常坑的是,這個最後的結果第一行居然是負數,也是醉了。說明這個看起來高大上的演算法也不過如此嘛。所以還不如取平均數呢。
首先將這些異常值變為空值,然後按照空值進行處理
資料清洗 python
資料清洗 python 1.1引言 對於處理大資料問題,首先就是要進行資料預處理,排除掉那些那些很離譜的資料,當然我們肯定不能乙個乙個用眼睛來找 容易累死 所以我們就要學會如何用程式來進行資料的預處理,我們常常用兩種語言 matlab和python,這裡我先介紹一下用python進行資料清洗。1.2...
Python 資料清洗
重複值處理 一般採取刪除法,但是有些不能刪 df.duplicated df.duplicated subset keep last first np.sum sd.duplicated df.dorp duplicates subset keep last first inplace true f...
Python 清洗資料
import numpy as np import pandas as pd from pandas import series,dataframe s series 1,2,3 index a b c print s a 1 b 2 c 3 dtype int64 print np.max s 可...