【问题标题】:How do convert from MMM-YYYY to YYYY-MM-DD, setting DD to the last day of month in a data frame?如何从 MMM-YYYY 转换为 YYYY-MM-DD,将 DD 设置为数据框中每月的最后一天?
【发布时间】:2021-09-21 19:56:28
【问题描述】:

我有一个关于使用数据框进行日期转换的类似问题。

我的数据框有两个日期字符串列,hiredateend_date,分别具有不同的日期格式,DD-MMM-YYYYMMM-YY

end_date 列没有 DD 来表示日期,因此应添加并设置为该月的最后一天。

以下是输入数据框的示例:

 empno  ename    hiredate end_date
     1 sreenu 17-Jun-2021   May-22

这是end_date转换后的预期输出:

 empno  ename    hiredate   end_date
     1 sreenu 17-Jun-2021 2022-05-31

我想创建一个方法/函数来识别所有日期列 数据框,然后将其转换为YYYY-MM-DD 格式。

【问题讨论】:

  • 欢迎来到 StackOverflow。你试过什么?请查看stackoverflow.com/questions/42950/… 以获取 Python 中每月的最后一天。
  • @rajah9,我在发布之前尝试过这个。但上面的问题与我的不同。我想创建一种方法来在我的数据帧上动态地将 DD-MM-YYYY 和 MMM-YY 转换为 YYYY-MM-DD 格式。

标签: python pandas date-conversion


【解决方案1】:

您可以根据'%B-%y'的格式将end_date转换为日期时间并添加MonthEnd(0)偏移量:

输入数据:

>>> df
   empno   ename     hiredate end_date
0      1  sreenu  17-Jun-2021   May-22

列变换:

>>> df['end_date'] = pd.to_datetime(
    df['end_date'], format='%b-%y'
).add(pd.offsets.MonthEnd(0))

输出结果:

>>> df
   empno   ename     hiredate   end_date
0      1  sreenu  17-Jun-2021 2022-05-31

【讨论】:

  • 我猜你的回答中有一个小错字。'%B' 是完整月份名称的掩码。由于 OP 要求转换短月份名称,因此应使用 '%b'
  • 你完全正确。示例月份是“五月”,所以我没有注意:)
  • 很好的答案,顺便说一句。
  • 非常感谢!
【解决方案2】:

您可以使用评论中指出的解决方案-

pd.to_datetime(df['end_date'], format='%b-%y').apply(lambda x: date(x.year, x.month, calendar.monthrange(x.year, x.month)[-1]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多