提问人:Siddhant Hardikar 提问时间:10/29/2023 最后编辑:desertnautSiddhant Hardikar 更新时间:10/29/2023 访问量:36
在我的 DataFrame 上将 ColumnTransformer 与 SimpleImputer 应用后,列的值正在互换
Values of columns are getting interchanged after applying ColumnTransformer with SimpleImputer on my Dataframe
问:
我有一个列顺序混合的数据帧 (xd)。示例 - categorical1、categorical2、numeric1、categorical3、numerical2、numerical3 等。现在,当我使用列转换器来使用 SimpleImputer 时,输出很奇怪。在输出中,列的值正在互换。例如,Numerical1 列现在具有 categorical1 列的值,categorical3 列具有 numeric2 列的值,依此类推。
每列缺失值:缺失值
numerical = xd.select_dtypes(exclude="object").columns
categorical = xd.select_dtypes(include="object").columns
preprocessor = ColumnTransformer(
transformers=[
("impute1", SimpleImputer(strategy="most_frequent"), categorical),
("impute2", SimpleImputer(strategy="median"), numerical)
],
remainder="passthrough"
)
X_transformed = preprocessor.fit_transform(xd)
f = pd.DataFrame(X_transformed, columns = xd.columns)
f.head(3)
如果观察,列的值正在互换。 列 KidneyDisease 的值为 Smoker 列 列 AlcoholDrinkers 的值为 列 BMI 列 BMI 的值为 Sleephours 列 等等。
我还尝试显式指定列:
preprocessor = ColumnTransformer(
transformers=[
("impute1", SimpleImputer(strategy="most_frequent"), ['Sex','GeneralHealth','PhysicalActivities','Stroke','Asthma','SkinCancer','KidneyDisease','Diabetes','DifficultyWalking','Smoker','AgeCategory','AlcoholDrinkers']),
("impute2", SimpleImputer(strategy="median"), ['PhysicalHealth', 'MentalHealth', 'SleepHours', 'BMI'])
],
remainder="passthrough"
)
transdorm = preprocessor.fit_transform(xd)
但我仍然面临同样的问题。
解决方案是什么?
答:
1赞
Corralien
10/29/2023
#1
不要使用原始列创建数据帧,因为列会重新排序(首先是“categorical”,然后是“numerical”,最后是“remainder”):f
preprocessor.get_feature_names_out()
preprocessor = ColumnTransformer(
transformers=[
("impute1", SimpleImputer(strategy="most_frequent"), categorical),
("impute2", SimpleImputer(strategy="median"), numerical)
],
remainder="passthrough", verbose_feature_names_out=False # <- avoid prefix
)
X_transformed = preprocessor.fit_transform(xd)
f = pd.DataFrame(X_transformed, columns=preprocessor.get_feature_names_out())
评论
0赞
Siddhant Hardikar
10/31/2023
我收到以下错误:AttributeError:Transformer impute1(类型 SimpleImputer)不提供get_feature_names_out。
0赞
Corralien
10/31/2023
你的版本是什么?scikit-learn
0赞
Siddhant Hardikar
11/2/2023
版本为 1.0.2
0赞
Corralien
11/2/2023
我的是 1.3.0。升级您的 please 版本。sklearn
评论