簡體   English   中英

使用 sci-kit learn 僅輸入數值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM