缺失值處理

2021-09-19 16:35:41 字數 3939 閱讀 9996

資料清洗主要是刪除原始資料集中的無關資料、重複資料,平滑雜訊資料,去除與資料探勘主題無關的資料,處理缺失值、異常值等

缺失主要為完全隨機缺失,隨機缺失和非隨機缺失

資料的缺失是隨機的,資料的缺失不依賴於任何不完全變數或完全變數。

資料的缺失不是完全隨機的,即該類資料的缺失依賴於其他完全變數。

資料的缺失依賴於不完全變數自身

處理方式分為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...