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

Pandas如何自定义函数批量替换指定多列的0/1值为No/Yes

问题说明

运行环境:Pandas 1.4.2,Python 3.9.12
当前数据集的Scholarship、Hipertension、Diabetes、Alcoholism、SMS_received等列以0、1分别指代'No'、'Yes',数据集样例如下:

Scholarship     Hipertension   Diabetes   Alcoholism  SMS_received    
0     0               1              0          0            0  
1     0               0              0          0            0  
2     0               0              0          0            0  
3     0               0              0          0            0  
4     0               1              1          0            0  

初始编写的替换函数存在逻辑错误,传入单个列时会误替换全表所有0/1值,无法支持传入列名列表批量处理指定列的需求,初始函数代码如下:

def replace_values(data_frame, column, being_replaced, replacement_value):
    data_frame[column] = df[column].replace(to_replace=being_replaced, value= 
    replacement_value)
return df

预期调用效果为传入DataFrame、待处理列名列表、待替换值列表、对应替换值列表,即可一次性完成指定列的值替换,调用示例:

replace_values(df, [*list_of_columns*], [0, 1], ['No', 'Yes'])
解决方案

该需求可以直接实现,不需要额外编写显式循环逻辑,Pandas原生支持对多列组成的子集做批量值替换。初始函数的核心问题有两个:

  • 变量作用域错误:函数入参名为data_frame,内部替换时却调用了全局变量df,导致替换范围不受入参控制
  • 语法缩进错误:return语句没有缩进至函数体内,不属于函数逻辑的一部分

修正后的可直接使用的函数代码如下:

def replace_values(data_frame, target_columns, being_replaced, replacement_value):
    # 仅对传入的目标列集合执行替换,不改动其他列数据
    data_frame[target_columns] = data_frame[target_columns].replace(
        to_replace=being_replaced,
        value=replacement_value
    )
    return data_frame

调用方式

将需要处理的列名组装为列表传入即可,示例:

# 定义需要处理的列列表
process_cols = ['Scholarship', 'Hipertension', 'Diabetes', 'Alcoholism', 'SMS_received']
# 执行替换
df = replace_values(df, process_cols, [0, 1], ['No', 'Yes'])

说明

  • 该函数同时兼容传入单个列名(字符串格式)和多个列名(列表格式)的场景,不需要额外写类型判断逻辑
  • 替换操作仅作用于传入的目标列,数据集其他列的0、1值不会被改动
  • 注意不要在函数内部混用全局DataFrame变量名,所有操作基于入参data_frame执行即可避免全表误修改问题

内容的提问来源于stack exchange,提问作者Wildo_Baggins311

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:27:25