列转换器:传递给需要 2D 数据的转换器的一维数据


这是我

第一次使用ColumnTransformer,我遇到了数组维度的问题。

这是我的数据帧名为"concat_data":

          Date  Hour  Observation
0  01/09/2015      0           10
1  01/09/2015      1            9
2  01/09/2015      2            8
3  01/09/2015      3           10
4  01/09/2015      4           12

我尝试使用以下代码仅在观察列上应用标准缩放器:

preprocessor = ColumnTransformer(
        transformers=[
            ('num', StandardScaler(), ['Observation'])],
        remainder="passthrough")
preprocessor.fit(concat_data, concat_data['Observation'])

我收到此错误消息:

值错误:传递给需要二维数据的转换器的一维数据。尝试 将列选择指定为一个项目的列表,而不是 标量。

我可以在没有ColumnTransformer

的情况下做到这一点,但我的目标是了解ColumnTransformer的工作原理。例如,此代码工作:

StandardScaler().fit(concat_data[['Observation']])

谢谢大家 !

尝试

preprocessor.fit(concat_data, concat_data)

preprocessor.fit(concat_data, concat_data[['Observation']])

另外,可能有用:使用 ColumnTransformer 的示例

关于使用 df['A']

和 df[['A']]

在一种情况下,您仍然有一个pd.DataFrame - 使用 df[['A']] ,在另一种情况下,它被挤压到 pd.Series - df['A'] .

pd.Series被视为一维对象,因为它允许有一列; pd.DataFrame是一个 2D 对象,允许具有多个列并相应地处理。

df = pd.DataFrame(data=[[1,2,3,4,5],[5,4,3,2,1]],index=[0,1],columns=['A','B','C','D','E'])
type(df[['A']])

Out[27]: pandas.core.frame.DataFrame

type(df['A'])

Out[28]: pandas.core.series.series

两种情况的输出也略有不同。

你应该

直接使用preprocessor.fit(concat_data),它会起作用,ColumnTransformer期望只有一个DataFrame而不是两个。它将自动查找列Observation

Artur Sokolovsky,我也尝试了scikit-learn的例子,但它也没有用

正如Vivek Kumar所建议的那样,这个问题是由于旧版本的scikit-learn造成的。更新到 0.20.02 解决了它。

相关内容

  • 没有找到相关文章

最新更新