如何将DataFrame中0/1值替换为Yes/No并保存回原DataFrame?
解决DataFrame列值替换并保存回原表的问题
问题场景
需要将DataFrame中"Open"列的1/0替换为"Yes"/"No",且后续要处理其他列,但之前的替换结果无法保存回原DataFrame。
正确解决方案
方法1:使用map函数(最简洁高效)
直接通过字典映射替换值,适合单列批量替换:
merged_stores["Open"] = merged_stores["Open"].map({1: "Yes", 0: "No"})
后续处理其他列时,只需替换列名即可,比如处理"Holiday"列:
merged_stores["Holiday"] = merged_stores["Holiday"].map({1: "Yes", 0: "No"})
方法2:修正你自定义的change函数用法
你的自定义函数逻辑没问题,但之前的apply调用方式导致无法正确赋值。可以直接对单列调用apply:
def change(val): if val == 1: return "Yes" else: return "No" # 直接对单列操作并赋值 merged_stores["Open"] = merged_stores["Open"].apply(change)
如果必须用行级apply(不推荐,效率低于单列操作),写法如下:
merged_stores["Open"] = merged_stores.apply(lambda x: change(x["Open"]), axis=1)
方法3:使用numpy.where函数
适合条件明确的替换场景:
import numpy as np merged_stores["Open"] = np.where(merged_stores["Open"] == 1, "Yes", "No")
为什么之前的方法失败?
- 你用
merged_stores[["Open"]].apply(...)操作的是DataFrame子集,返回的是Series,但直接赋值给merged_stores[["Open"]]时,易因索引或维度匹配问题失效,改成操作单列merged_stores["Open"]即可解决。 apply函数本身没有inplace=True参数,设置该参数无效。- 若创建新DataFrame后赋值,需确保新列的索引与原DataFrame完全一致,否则会出现缺失值或赋值失败。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

