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

Pandas更新DataFrame行的替代方法:避免冗长if-elif手动修改日期

问题背景

我有如下示例数据:

序号datevalue
02021/0550
12021/0660
22021/0770
32021/0880
42021/0990
52021/10100

我需要更新date列的数据,例如将2021/05修改为05/10/2021、2021/06修改为06/12/2021,所有行的新日期都需要手动指定。

目前我使用的写法如下,请问有没有更高效巧妙的实现方式?

for i in df.index:
    if df['date'][i] == '2021/05':
        df['date'][i] = '05/10/2021'
    elif df['date'][i] == '2021/06':
        df['date'][i] = '06/12/2021'

需要更新的行数超过一百条,上述写法会导致代码非常冗长,希望找到更简洁的方案。


解决方案

通过映射字典 + pandas内置批量替换方法即可实现需求,完全不用写循环和多分支判断:

  1. 先把所有旧日期到新日期的对应关系整理成一个字典,所有规则统一在字典里维护,100条数据只需要加100个键值对即可
  2. 直接调用replace()方法完成批量替换,底层是向量化操作,比手写循环效率高得多,还能避免原生写法的链式赋值警告

示例代码如下:

# 定义新旧日期映射规则,所有需要替换的对应关系都在这里添加
date_map = {
    "2021/05": "05/10/2021",
    "2021/06": "06/12/2021",
    "2021/07": "这里填你要替换的2021/07对应的新日期",
    # 剩余需要替换的日期按上面的格式继续加即可
}

# 批量替换,没有匹配到的日期会保留原值不修改
df["date"] = df["date"].replace(date_map)

如果你的需求是只有在映射里存在的日期才保留新值,不存在的直接设为空值,可以把最后一行替换为:

df["date"] = df["date"].map(date_map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:03