Python pandas实现连续数字序列的日期重编码(支持闰年处理)
基于Pandas的整数-日期重编码实现方案
核心逻辑说明
映射规则的本质拆解为:
- 固定基准日期:
2020-12-31(对应整数1的映射值,完全匹配示例规则) - 任意整数
n对应的日期 = 基准日期 向前推算n-1天
该方式完全依托pandas内置的标准日历引擎,自动处理闰年、大小月、跨年度的所有日期边界问题,不需要手动维护成百上千条映射字典,哪怕需要处理1000+甚至上万的连续日期都能高效运行。
完整可运行实现代码
1. 导入依赖
import pandas as pd
2. 构造待转换数据
# 构造和你给出的示例一致的原始序列,含空值场景 raw_values = [1,1,1,1, 2,2,2,3,3,3,3,3,4,4,5,6,6,6, None, 100,100,100] # 转为pandas Series,自动识别空值 s = pd.Series(raw_values)
如果你的数据存储在DataFrame中,直接引用对应列即可,不需要单独构造序列。
3. 核心转换逻辑
# 定义基准日期:整数1对应的31.12.2020 base_date = pd.to_datetime("2020-12-31") # 执行转换:空值会自动保留为空日期,不会触发计算错误 converted_dates = base_date - pd.to_timedelta(s - 1, unit="D")
4. 格式化为目标日期格式
如果需要输出为示例中的dd.mm.yyyy字符串格式,追加一行代码即可:
converted_dates_str = converted_dates.dt.strftime("%d.%m.%Y")
结果验证
- 整数1的转换结果:
31.12.2020 - 整数2的转换结果:
30.12.2020 - 整数3的转换结果:
29.12.2020
完全匹配你给出的映射示例。
实用适配说明
- 自动兼容闰年逻辑:推算到2020年2月时会自动识别2月29日,推算到平年2月时自动跳过29日,不需要额外编写判断代码。
- 灵活调整基准日期:如果后续业务变更基准日期,仅需修改
base_date的取值,其余逻辑无需改动。 - 空值兼容:原始序列中的空值会自动保留为空,不会抛出运行错误。
- 大数量级适配:转换1000+连续日期的运行效率和小样本完全一致,不需要额外优化。
内容的提问来源于stack exchange,提问作者sylvia
相关产品推荐
相关产品推荐

