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

Python中pandas拼接年月列转YYYYmmdd格式1月被识别为10月问题求解

问题根因

你遇到的问题是月份转字符串后没有补前导零导致的:

  • 月份为1时,转字符串得到的是"1"而非"01",拼接后得到的字符串格式是类似2023101(7位)
  • 用format='%Y%m%d'解析时,会按4位年、2位月、2位日的规则拆分,7位字符串会被拆为年=2023、月=10、日=1,因此1月的记录全部被识别为10月1日。

解决方案

方案1:修改原有拼接逻辑,给月份补前导零

只需要在月份转字符串后调用str.zfill(2)方法,自动给不足2位的内容补前导零即可,修改后代码如下:

dfyz_m_d['dt'] =  '01'# 为每个月生成固定的1号日期
# 月份转字符串后补前导零到2位
dfyz_m_d['CalendarWeek1'] =  dfyz_m_d['year'].map(str) + dfyz_m_d['mon'].map(str).str.zfill(2) + dfyz_m_d['dt'].map(str)
dfyz_m_d['CalendarWeek'] = pd.to_datetime(dfyz_m_d['CalendarWeek1'], format='%Y%m%d')

方案2:更简洁的原生方法(推荐)

Pandas的pd.to_datetime本身支持直接解析包含年、月、日字段的DataFrame,不需要手动拼接字符串,代码更简洁也不会出现格式错误:

# 直接指定年、月列,手动指定日为1即可
dfyz_m_d['CalendarWeek'] = pd.to_datetime(dfyz_m_d[['year', 'mon']].assign(day=1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:15:03