【发布时间】:2022-02-01 08:30:43
【问题描述】:
我有一个这样的数据框:
department review projects salary satisfaction bonus avg_hrs_month left
0 operations 0.577569 3 low 0.626759 0 180.866070 0
1 operations 0.751900 3 medium 0.443679 0 182.708149 0
2 support 0.722548 3 medium 0.446823 0 184.416084 0
3 logistics 0.675158 4 high 0.440139 0 188.707545 0
4 sales 0.676203 3 high 0.577607 1 179.821083 0
我想尝试 ColumnTransformer() 并返回转换后的数据帧。
ord_features = ["salary"]
ordinal_transformer = OrdinalEncoder()
cat_features = ["department"]
categorical_transformer = OneHotEncoder(handle_unknown="ignore")
ct = ColumnTransformer(
transformers=[
("ord", ordinal_transformer, ord_features),
("cat", categorical_transformer, cat_features ),
]
)
df_new = ct.fit_transform(df)
df_new
这给了我一个'
如果我使用 pd.DataFrame(ct.fit_transform(df)) 那么我得到一个单列:
0
0 (0, 0)\t1.0\n (0, 7)\t1.0
1 (0, 0)\t2.0\n (0, 7)\t1.0
2 (0, 0)\t2.0\n (0, 10)\t1.0
3 (0, 5)\t1.0
4 (0, 9)\t1.0
但是,我期待看到像这样转换后的数据框?
review projects salary satisfaction bonus avg_hrs_month operations support ...
0 0.577569 3 1 0.626759 0 180.866070 1 0
1 0.751900 3 2 0.443679 0 182.708149 1 0
2 0.722548 3 2 0.446823 0 184.416084 0 1
3 0.675158 4 3 0.440139 0 188.707545 0 0
4 0.676203 3 3 0.577607 1 179.821083 0 0
ColumnTransformer() 可以吗?
【问题讨论】:
-
可以在
.fit_transform()的输出上调用.toarray(),如下pd.DataFrame(ct.fit_transform(df).toarray())。相反,对于列名,您必须坚持自定义的内容,因为OrdinalEncoder不提供方法.get_feature_names_out(),与OneHotEncoder不同。最后,对于转换后的列顺序,我建议查看stackoverflow.com/questions/68874492/…。
标签: python-3.x dataframe scikit-learn encoder