資料清洗主要是刪除原始資料集中的無關資料、重複資料,平滑雜訊資料,去除與資料探勘主題無關的資料,處理缺失值、異常值等
缺失主要為完全隨機缺失,隨機缺失和非隨機缺失
資料的缺失是隨機的,資料的缺失不依賴於任何不完全變數或完全變數。
資料的缺失不是完全隨機的,即該類資料的缺失依賴於其他完全變數。
資料的缺失依賴於不完全變數自身
處理方式分為3類,刪除記錄、資料插補和不處理
# 生成資料
import pandas as pd
import numpy as np
df = pd.dataframe(np.random.randn(6,
4), columns=
['a'
,'b'
,'c'
,'d',]
)# 生成資料
df.iloc[1:
2,1]
= np.nan #增加缺失值
df.iloc[3,
2]= np.nan
df.iloc[4,
3]= np.nan
df
ab
cd0-1.078160
-2.039581
2.353353
0.561535
10.688913
nan0.770112
-1.633434
22.540337
1.256162
-1.327333
-0.023861
30.191514
0.831956
nan-0.083259
4-0.845405
-1.113420
0.236066
nan5
-0.606298
1.322792
-0.637305
0.560106
# 檢視缺失值
nan_all = df.isnull(
)nan_all
ab
cd0false
false
false
false
1false
true
false
false
2false
false
false
false
3false
false
true
false
4false
false
false
true
5false
false
false
false
nan_col1 = df.isnull().
any(
)# 獲得含有空值的列
nan_col1
a false
b true
c true
d true
dtype: bool
nan_col2 = df.isnull().
all(
)# 獲得全部為空值的列
nan_col2
a false
b false
c false
d false
dtype: bool
df1 = df.dropna(
)# 直接刪除空資料
df1
ab
cd0-1.078160
-2.039581
2.353353
0.561535
22.540337
1.256162
-1.327333
-0.023861
5-0.606298
1.322792
-0.637305
0.560106
常用插值方法:
為每個缺失值產生一套可能的插補值,這些值反映了無響應模型的不確定性
每個插補資料集合都用針對完整資料集的統計方法進行統計分析
對來自各個插補資料集的結果,根據評分函式進行選擇,產生最終的插補值
# 均值/中位數/眾數插補
df_mean = df.fillna(np.mean(df)
)# 均值
df_mean
# df_median = df.fillna(np.median(df)) #中位數
# df_median
# df_mode = df.fillna(np.argmax(np.bincount(df))) # 眾數
# df_mode
ab
cd0-1.078160
-2.039581
2.353353
0.561535
10.688913
0.051582
0.770112
-1.633434
22.540337
1.256162
-1.327333
-0.023861
30.191514
0.831956
0.278979
-0.083259
4-0.845405
-1.113420
0.236066
-0.123783
5-0.606298
1.322792
-0.637305
0.560106
# 拉格朗日插值
from scipy.interpolate import lagrange ## 匯入拉格朗日插值函式
# s為列向量,n為被插值的位置,k為取前後的資料個數,預設5個
defployinterp_columns
(s, n, k=5)
: y = s[
list
(range
(n-k ,n))+
list
(range
(n+1
, n+
1+k))]
# 取數
y = y[y.notnull()]
# 剔除空值
return lagrange(y.index,
list
(y))
(n)# 插值並返回插值結果
# 逐個元素判斷是否需要插值
for i in df.columns:
for j in
range
(len
(df)):
if(df[i]
.isnull())
[j]:
# 如果為空即插值
df[i]
[j]= ployinterp_columns(df[i]
, j)
print
(df)
a b c d
0 -1.078160 -2.039581 2.353353 0.561535
1 0.688913 -0.937481 0.770112 -1.633434
2 2.540337 1.256162 -1.327333 -0.023861
3 0.191514 0.831956 -1.295290 -0.083259
4 -0.845405 -1.113420 0.236066 -1.752516
5 -0.606298 1.322792 -0.637305 0.560106
缺失值處理
pandas使用nan not a number 表示浮點和非浮點陣列中的缺失資料,python內建的none值也會被當做na處理,pandas物件上的所有描述統計都排除了缺失資料。na處理方法 方法 說明dropna 根據各標籤的值是否存在缺失資料對軸標籤進行過濾,可通過閾值調節對缺失值的容忍度 ...
缺失值處理
之前寫過一篇文章缺失值視覺化處理 missingno 主要介紹了缺失值的檢視,今天聊一下,出現了缺失值後我們要做的後續工作,就是缺失值的處理。首先附上幾個 data資料集 data.isnull 缺失值判斷 是缺失值返回true,否則範圍false data.isnull sum 缺失值計算 返回每...
缺失值處理
在日常的處理資料的時候,會遇到資料中某些地方沒有值,也就是缺失了。對於這種情況,一半有兩種情況 刪除和插補。一般步建議刪除。引數介紹 missing value 表示缺失值是什麼 strategy 表示填補的策略,是用均值還是中值等 axis表示按照行還是列填補。注意 資料中的人缺失值必須為np.n...