为什么sklearn OneHotEncoder不能与单个数据框列一起使用?

问题描述

我正在尝试对单个pandas数据框列进行一次性编码。这就是我所拥有的:

OH_encoder = OneHotEncoder(handle_unkNown='ignore',sparse=False)
OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(X_train['time_of_day']))

运行此命令时,我得到了一个相当大的错误堆栈,可以将其总结如下:

ValueError: Expected 2D array,got 1D array instead:

我似乎无法弄清楚。

以下是一些示例数据:

X_train = pd.DataFrame({'ID': ['1234','5678','1234'],'time_of_day': ['Morning','Afternoon','Evening','Morning']})

感谢您的帮助!

解决方法

如果说该方法需要2D数组,只需为其提供

X_train['time_of_day'].to_frame()
,

您不是传递数据框,而是传递意甲。

type(X_train['time_of_day'])
pandas.core.series.Series

您可以使用X_train [['time_of_day']](与[[]]一起使用):

type(X_train[['time_of_day']])
pandas.core.frame.DataFrame

OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(X_train[['time_of_day']]))