如何基于Pandas DataFrame日期列新增对应月份最后一天列?
代码失效原因
pd.Period仅支持处理单个标量日期值,直接传入整列Series格式的日期数据会触发类型错误,无法完成批量计算,这是你之前代码未达预期的核心原因。
实现方案
以下两种都是Pandas原生的向量化实现,无需编写循环,执行效率高,可直接使用:
- 方案1:月末偏移量实现(最简洁,性能最优)
先将日期列统一转为datetime类型,再通过Pandas内置的MonthEnd偏移量直接计算对应月份的最后一天:
如果需要返回纯date格式而非datetime格式,在代码末尾追加# 统一日期列类型,规避类型报错 df['date'] = pd.to_datetime(df['date']) # 参数0保证传入日期本身是当月最后一天时,不会跳转到下一月月末 df['last_day_in_month'] = df['date'] + pd.offsets.MonthEnd(0).dt.date即可。 - 方案2:沿用Period逻辑的正确写法
借助.dt访问器逐元素处理整列日期,实现你最初的编码思路:df['date'] = pd.to_datetime(df['date']) df['last_day_in_month'] = df['date'].dt.to_period('M').dt.end_time.dt.date
效果验证
用测试数据运行后输出完全匹配需求:
date last_day_in_month 0 2023-01-05 2023-01-31 1 2023-02-15 2023-02-28 2 2023-04-30 2023-04-30
内容的提问来源于stack exchange,提问作者Katsu
相关产品推荐
相关产品推荐

