ColumnTransformer :将 1D 数据传递给需要 2D 数据的转换器

Bri*_*ice 5 python scikit-learn

这是我第一次使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

preprocessor.fit(concat_data, concat_data['Observation'])
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

ValueError:1D 数据传递到需要 2D 数据的转换器。尝试将列选择指定为一项的列表而不是标量。

我可以在没有 ColumnTransformer 的情况下完成此操作,但我的目标是了解 ColumnTransformer 的工作原理。例如,这段代码可以工作:

StandardScaler().fit(concat_data[['Observation']])
Run Code Online (Sandbox Code Playgroud)

谢谢大家!

Art*_*sky -1

尝试

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是一个二维对象,允许有多个列并进行相应处理。

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']])
Run Code Online (Sandbox Code Playgroud)

输出[27]:pandas.core.frame.DataFrame

type(df['A'])
Run Code Online (Sandbox Code Playgroud)

输出[28]:pandas.core.series.Series

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