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

数据清洗问询:为无年份日期补全年份的代码优化方案

优化日期补全年份的实现方案

你已经搞定了核心功能,这里分享几个更简洁、易维护的优化思路,完美适配你提到的规则:1-3月补2018年,其余月份补2017年(数据范围为2017年4月及以后)。

方案一:利用datetime模块简化逻辑

直接借助datetime的内置解析能力处理英文月份,再通过月份数字判断补全年份,代码紧凑且不易出错:

from datetime import datetime

def add_year_to_date(date_str):
    # 先解析出日和月(临时年份不影响月份判断)
    temp_date = datetime.strptime(date_str, "%d %B")
    # 根据月份规则匹配年份
    year = 2018 if temp_date.month in (1, 2, 3) else 2017
    # 格式化输出统一格式的完整日期
    return temp_date.strftime(f"%d %B {year}")

# 测试示例
print(add_year_to_date("15 March"))  # 输出: 15 March 2018
print(add_year_to_date("20 April"))  # 输出: 20 April 2017

这个方案的优势:

  • 不用手动维护英文月份和数字的映射,依赖内置工具减少出错概率
  • 逻辑清晰直白,新手也能快速看懂
  • 输出格式和输入完全匹配,不会出现格式偏差

方案二:预定义映射实现极致性能

如果要处理超大规模数据集,字典查找的O(1)性能会更有优势,直接预定义月份到年份的映射关系:

# 提前把所有英文月份对应的年份映射好
MONTH_YEAR_MAP = {
    "January": 2018, "February": 2018, "March": 2018,
    "April": 2017, "May": 2017, "June": 2017,
    "July": 2017, "August": 2017, "September": 2017,
    "October": 2017, "November": 2017, "December": 2017
}

def add_year_to_date(date_str):
    day, month = date_str.split()
    return f"{day} {month} {MONTH_YEAR_MAP[month]}"

# 测试示例
print(add_year_to_date("15 March"))  # 输出: 15 March 2018
print(add_year_to_date("20 April"))  # 输出: 20 April 2017

这个方案的优势:

  • 性能拉满,适合处理百万级以上的数据集
  • 映射关系一目了然,后续要调整年份规则时,直接修改字典就行,扩展性极强

方案三:兼容多种输入格式的鲁棒版本

如果你的输入可能混有缩写月份(比如"Mar"代替"March"),可以做一个兼容多种格式的版本:

from datetime import datetime

def add_year_to_date(date_str):
    # 先尝试完整月份格式,失败就用缩写格式解析
    try:
        temp_date = datetime.strptime(date_str, "%d %B")
    except ValueError:
        temp_date = datetime.strptime(date_str, "%d %b")
    year = 2018 if temp_date.month <= 3 else 2017
    # 统一输出完整月份格式,保证数据一致性
    return temp_date.strftime(f"%d %B {year}")

# 测试示例
print(add_year_to_date("15 Mar"))  # 输出: 15 March 2018
print(add_year_to_date("20 Apr"))  # 输出: 20 April 2017

这个方案的优势:

  • 兼容完整月份和缩写月份两种输入,鲁棒性拉满
  • 输出统一为完整月份格式,避免数据格式混乱

选择建议

  • 追求代码简洁、可读性优先:选方案一
  • 处理超大量数据、要极致性能:选方案二
  • 输入格式不固定、需要兼容多种情况:选方案三

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:04