Python中如何将DataFrame多列yes/no转为二进制0/1?
解决DataFrame多列yes/no转1/0的高效方法
首先纠正你代码的错误:
你写的final_df['ads','premium']是错误的列选择方式,pandas中选取多列需要使用双层方括号包裹列名列表,正确写法是final_df[['ads','premium']]。原写法会被解析为查找列名为('ads','premium')的单列,而你的DataFrame中不存在这一列,因此报错。
批量转换多列的几种高效方式
1. 直接指定多列批量替换
如果已经明确知道需要转换的列名,一行代码就能完成转换:
final_df[['ads', 'premium']] = final_df[['ads', 'premium']].replace({'yes': 1, 'no': 0})
这会直接将指定列的yes替换为1,no替换为0,并覆盖原列数据。如果不想修改原DataFrame,可以赋值给新变量:
new_df = final_df.copy() new_df[['ads', 'premium']] = new_df[['ads', 'premium']].replace({'yes': 1, 'no': 0})
2. 自动筛选目标列批量转换
如果有大量包含yes/no的列,手动列名太繁琐,可以先自动筛选出所有符合条件的列,再批量替换:
# 筛选所有值仅为yes/no的列 target_cols = [col for col in final_df.columns if final_df[col].isin(['yes', 'no']).all()] # 若列中只要存在yes/no就转换,用.any()替代.all() # target_cols = [col for col in final_df.columns if final_df[col].isin(['yes', 'no']).any()] # 批量转换 final_df[target_cols] = final_df[target_cols].replace({'yes': 1, 'no': 0})
3. 使用apply+map实现映射
另一种等价方式是用apply配合map,适合需要自定义映射逻辑的场景:
final_df[['ads', 'premium']] = final_df[['ads', 'premium']].apply(lambda x: x.map({'yes': 1, 'no': 0}))
内容的提问来源于stack exchange,提问作者Stuti Rawat
相关产品推荐
相关产品推荐

