pandas 我有时间序列数据,日期为YYYYMX,其中X表示从1到12的月份,我想转换为YYYY-XX,其中XX是一个数字,

fcwjkofz  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(75)

我正在编写的代码是:

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

df.index = pd.to_datetime(
    df.index
    .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")
    .str.replace("M10","-10")
    .str.replace("M11","-11")
    .str.replace("M12","-12")
)

字符串
字符串是日期例如。2001 M1。我希望它是2001-01。它抛出这个错误:

ParserError: Unknown string format: 2000-010

y53ybaqx

y53ybaqx1#

您可以在解析字符串时指定格式。Pandas将自动使用该格式从字符串中推断日期

df.index = pd.to_datetime(df.index, format='%YM%m').dt.strftime('%Y-%m')

个字符

91zkwejq

91zkwejq2#

如果输入字符串为"2023M12",则将M1替换为-O1,结果为"2023-012"
颠倒str.replace调用的顺序可能会解决这个问题,但这是一个脆弱而丑陋的解决方案。
您可以使用正则表达式仅在字符串的末尾替换-MX模式,并且可以在-M<digit>-M1<digit>上进行匹配,而不是枚举所有12个可能的字符串。
但是Shubham Sharma's answer可能是一个更好的解决方案;它专门处理日期字符串,而不是一般的字符串,因此可能不太容易出错。

相关问题