我在最初作为对象读取的 DataFrame 中有一个系列,然后需要将其转换为 yyyy-mm-dd 形式的日期,其中 dd 是月底。
例如,我有 DataFrame df
列 Date
作为对象:
... Date ...
... 200104 ...
... 200508 ...
说到这里,我想要的是一个日期对象:
... Date ...
... 2001-04-30 ...
... 2005-08-31 ...
这样 df['Date'].item()
返回
datetime.date(2001, 04, 30)
我使用以下代码几乎可以到达那里,但我所有的日期都是在月初,而不是月底。请指教。
df['Date'] = pd.to_datetime(df['Date'], format="%Y%m").dt.date
注意:我已经导入了 Pandas (pd) 和 datetime (dt)
最佳答案
您可以使用 pandas.tseries.offsets.MonthEnd
:
from pandas.tseries.offsets import MonthEnd
df['Date'] = pd.to_datetime(df['Date'], format="%Y%m") + MonthEnd(0)
MonthEnd
中的0
只是指定前滚到给定月份的月底。请注意,如果我们使用 MonthEnd(1)
,那么我们将得到下一个日期,即月底。
如果您想要下个月的最后一天,则可以添加一个额外的 MonthEnd(1)
等。这应该适用于任何月份,因此您不需要知道天数在一个月内,或类似的事情。更多偏移信息可以在 documentation 中找到。 .
示例用法和输出:
df = pd.DataFrame({'Date': [200104, 200508, 201002, 201602, 199912, 200611]})
df['EndOfMonth'] = pd.to_datetime(df['Date'], format="%Y%m") + MonthEnd(1)
Date EndOfMonth
0 200104 2001-04-30
1 200508 2005-08-31
2 201002 2010-02-28
3 201602 2016-02-29
4 199912 1999-12-31
5 200611 2006-11-30
关于python - 查找 Pandas DataFrame 系列的月底,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354105/