[英]Imputing only the numerical values using sci-kit learn
所以,我有一個 DataFrame,它包含分類和數值的混合,目前是12345
行 x 171
列。
我在分類變量和數值中都有缺失值,我想在其中估算這些值。 對於數值列,我正在執行以下操作;
import pandas as pd
import numpy as np
data = pd.read_csv('filepath')
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values=np.nan, strategy='mean', axis=0)
data = imp.fit_transform(data)
然后我收到以下錯誤
ValueError: could not convert string to float: 'USD'
我理解這是因為我使用 sci-kit 學習帶有strategy = mean
imputer,這與 Categorical 變量不兼容。 我寧願不必遍歷每一列並手動拉出數值,所以我正在尋找一種方法,我可以只對數值列執行此插補。
如果您使用熊貓的分類編碼功能,這一切都可以非常簡單地處理。 然而,我很少發現自己擁有正確編碼的數據,並且寧願擁有一個強大的解決方案而不是依賴純熊貓。
這就是我要做的。
categorical_columns = []
numeric_columns = []
for c in data.columns:
if data[c].map(type).eq(str).any(): #check if there are any strings in column
categorical_columns.append(c)
else:
numeric_columns.append(c)
#create two DataFrames, one for each data type
data_numeric = data[numeric_columns]
data_categorical = pd.DataFrame(data[categorical_columns])
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values=np.nan, strategy='mean', axis=0)
data_numeric = pd.DataFrame(imp.fit_transform(data_numeric), columns = data_numeric.columns) #only apply imputer to numeric columns
#you could do something like one-hot-encoding of data_categorical here
#join the two masked dataframes back together
data_joined = pd.concat([data_numeric, data_categorical], axis = 1)
您可以使用 select_dtypes 方法選擇所有數字列:
numeric_columns = data.select_dtypes(include='number').columns
imp = Imputer(missing_values=np.nan, strategy='mean', axis=0)
data[numeric_columns] = pd.DataFrame(imp.fit_transform(data[numeric_columns]), columns=numeric_columns)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.