使用 sci-kit learn 仅输入数值

Tay*_*lrl 5 python preprocessor scikit-learn

因此,我有一个 DataFrame,其中包含当前12345按行排列的分类值和数值值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)
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误

ValueError:无法将字符串转换为浮点数:'USD'

我理解这是因为我使用的 sci-kit learns imputer 与strategy='mean'分类变量不兼容。我宁愿不必遍历每一列并手动提取数值,因此我正在寻找一种只能在数值列上执行此插补的方法。

sko*_*oeb 4

如果您使用 panda 的分类编码功能,这一切都可以非常简单地处理。然而,我很少发现自己拥有正确编码的数据,并且宁愿拥有一个强大的解决方案而不是依赖纯熊猫。

这就是我要做的。

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, index=data_numeric.index) #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)
Run Code Online (Sandbox Code Playgroud)