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

时间序列日期格式转换报错:YYYYMX转YYYY-XX遇ParserError

问题分析

你遇到的ParserError: Unknown string format: 2000-010是因为字符串替换顺序错误:原代码先替换M1到M9,当处理2000M10时,会先把M1替换成-01,剩下的0留在后面形成2000-010,这是无效日期格式,导致解析失败。

解决方案

下面提供几种可靠的解决方法:

方法1:调整替换顺序(直接修改原有代码)

先替换两位数的月份(M10、M11、M12),再替换一位数的月份,避免提前拆分多位数月份:

import pandas as pd

df = pd.read_excel("Ahiakpor.xlsx", index_col=0)

df.index = pd.to_datetime(
    df.index
    .str.replace("M10", "-10")
    .str.replace("M11", "-11")
    .str.replace("M12", "-12")
    .str.replace("M1", "-01")
    .str.replace("M2", "-02")
    .str.replace("M3", "-03")
    .str.replace("M4", "-04")
    .str.replace("M5", "-05")
    .str.replace("M6", "-06")
    .str.replace("M7", "-07")
    .str.replace("M8", "-08")
    .str.replace("M9", "-09")
)

方法2:正则表达式简化替换(更简洁)

通过正则匹配M后的数字,一次性完成替换并自动补零:

import pandas as pd

df = pd.read_excel("Ahiakpor.xlsx", index_col=0)

# 正则匹配M+数字,替换为-+补零到两位的月份
df.index = pd.to_datetime(df.index.str.replace(r'M(\d+)', lambda x: f'-{x.group(1).zfill(2)}', regex=True))

方法3:直接指定解析格式(最优解)

无需手动替换,pd.to_datetime支持直接指定输入格式%YM%m,自动识别一位/两位数月份:

import pandas as pd

df = pd.read_excel("Ahiakpor.xlsx", index_col=0)

df.index = pd.to_datetime(df.index, format='%YM%m')

这种方法代码最简洁,还能避免字符串替换带来的边界问题,是最高效的处理方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:54