因此,我有一个包含分类和数值混合的DataFrame,它当前是12345
171
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'
我理解这是因为我使用的是带有strategy = mean
的sci-kit学习计算机,它与分类变量不兼容。我宁愿不必遍历每一列并手动提取数值,所以我正在寻找一种只在数值列上执行这种推算的方法。
发布于 2019-03-13 01:55:12
如果您使用panda的categorical encoding功能,这一切都可以非常简单地处理。然而,我很少发现自己有正确编码的数据,我宁愿有一个健壮的解决方案,而不是依赖纯粹的熊猫。
这就是我要做的。
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)
发布于 2020-08-20 17:43:05
您可以使用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)
https://stackoverflow.com/questions/55124655
复制相似问题