时间序列日期格式转换报错: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
相关产品推荐
相关产品推荐

