一、什麼是數據缺失
數據缺失指的是數據集中的某些屬性值或者整行數據缺失的情況。在實際應用中,數據缺失是很常見的情況。缺失值可能是由人為的數據輸入錯誤、數據採集的限制、傳輸數據時出錯等原因造成的。
缺失數據在進行數據分析或建立模型的時候會影響數據的準確性和健壯性。因此需要對數據缺失進行填充。
二、數據缺失填充的方法
常見的數據缺失值填充方法包括均值填充、中位數填充、眾數填充、插值法、隨機森林等方法。
三、Python實現數據缺失值填充
Python作為一種流行的編程語言,可以非常方便地實現數據缺失值填充。
1. 均值填充
均值填充方法是將缺失值用該列的均值來進行填充。代碼如下:
import pandas as pd import numpy as np #生成含有缺失值的DataFrame df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C']) df.iloc[3:5, 0] = np.nan df.iloc[4:6, 1] = np.nan df.iloc[5:8, 2] = np.nan print(df) #使用均值填充 df.fillna(df.mean(), inplace=True) print(df)
2. 中位數填充
中位數填充方法是將缺失值用該列的中位數來進行填充。代碼如下:
import pandas as pd import numpy as np #生成含有缺失值的DataFrame df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C']) df.iloc[3:5, 0] = np.nan df.iloc[4:6, 1] = np.nan df.iloc[5:8, 2] = np.nan print(df) #使用中位數填充 df.fillna(df.median(), inplace=True) print(df)
3. 眾數填充
眾數填充方法是將缺失值用該列的眾數來進行填充。代碼如下:
import pandas as pd import numpy as np #生成含有缺失值的DataFrame df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C']) df.iloc[3:5, 0] = np.nan df.iloc[4:6, 1] = np.nan df.iloc[5:8, 2] = np.nan print(df) #使用眾數填充 df.fillna(df.mode().iloc[0], inplace=True) print(df)
4. 插值法填充
插值法填充方法是利用數據之間的關係,對缺失值進行插值處理。常見的插值方法有線性插值、多項式插值、樣條插值等。代碼如下:
import pandas as pd import numpy as np #生成含有缺失值的DataFrame df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C']) df.iloc[3:5, 0] = np.nan df.iloc[4:6, 1] = np.nan df.iloc[5:8, 2] = np.nan print(df) #使用線性插值填充 df.interpolate(method='linear', inplace=True) print(df)
5. 隨機森林填充
隨機森林填充方法是利用隨機森林演算法對數據進行建模預測,從而得到缺失值的填充。代碼如下:
import pandas as pd import numpy as np from sklearn.ensemble import RandomForestRegressor #生成含有缺失值的DataFrame df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C']) df.iloc[3:5, 0] = np.nan df.iloc[4:6, 1] = np.nan df.iloc[5:8, 2] = np.nan print(df) #利用隨機森林演算法填充缺失值 def fill_with_rf(df): fill_df = df.copy() #獲取含有缺失值的列 missing_col = fill_df.columns[fill_df.isnull().any()] for col in missing_col: #將非缺失值列作為特徵矩陣 X_train = fill_df.loc[fill_df[col].notnull()].drop(col, axis=1) #將缺失值列作為目標標量 y_train = fill_df.loc[fill_df[col].notnull(), col] #建立隨機森林回歸模型 rf = RandomForestRegressor(n_estimators=100, random_state=0) rf.fit(X_train, y_train) #預測缺失值 fill_df.loc[fill_df[col].isnull(), col] = rf.predict(fill_df.loc[fill_df[col].isnull()].drop(col, axis=1)) return fill_df df_filled = fill_with_rf(df) print(df_filled)
四、總結
在數據分析和建模過程中,常常需要處理數據集中的缺失值。本文介紹了常見的幾種缺失值填充方法,並使用Python語言編寫代碼實現了這些方法。使用這些方法可以對數據集中的缺失值進行有效的填充,提高數據的準確性和健壯性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/185760.html