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'分类变量不兼容。我宁愿不必遍历每一列并手动提取数值,因此我正在寻找一种只能在数值列上执行此插补的方法。
如果您使用 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)