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 的示例
在一种情况下,您仍然有一个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
两种情况的输出也略有不同。