You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:40:44