如何在Pandas中反转MultiLabelBinarizer的二值化结果?
正确还原
transformed_df的方法 你的思路方向是对的,但代码里有几个细节问题导致结果不符合预期——比如使用了已弃用的as_matrix()方法,以及没有正确处理inverse_transform的返回格式。下面是修正后的完整解决方案:
问题拆解
as_matrix()已经被pandas官方弃用,推荐用to_numpy()或者.values来提取数值矩阵;mlb.inverse_transform()返回的是元组的迭代器,需要转换成列表才能和原始数据的格式匹配;- 直接用
join会生成默认列名的新列,需要手动指定列名为fruits并和user_id关联。
正确代码实现
# 提取二值化特征列(排除user_id列) binary_features = final_df.columns[final_df.columns != 'user_id'] binary_data = final_df[binary_features].to_numpy() # 执行逆转换,将返回的元组转为列表格式 fruits_lists = [list(fruit_tuple) for fruit_tuple in mlb.inverse_transform(binary_data)] # 合并user_id列与还原后的水果列表,得到目标transformed_df inverse_transformed_df = final_df[['user_id']].copy() inverse_transformed_df['fruits'] = fruits_lists print(inverse_transformed_df)
输出结果
user_id fruits 0 1 [banana, orange] 1 2 [orange, apple, banana] 2 3 [mango]
这样就完美还原出了最初的transformed_df结构。另外要注意:必须使用之前做二值化时的同一个mlb实例——如果是重新运行代码,要确保mlb已经拟合过原始的水果类别集合,否则逆转换会出现类别不匹配的错误。
内容的提问来源于stack exchange,提问作者Regressor
相关产品推荐
相关产品推荐

