问题描述
我在DataFrame中有一个系列,最初是作为对象读取的,然后需要将其转换为yyyy-mm-dd形式的日期,其中dd是月末.
I have a series within a DataFrame that I read in initially as an object, and then need to convert it to a date in the form of yyyy-mm-dd where dd is the end of the month.
作为一个例子,我有一个以Date列为对象的DataFrame df:
As an example, I have DataFrame df with a column Date as an object:
... Date ...
... 200104 ...
... 200508 ...
说完这些之后,我想要的是一个日期对象:
What I want when this is all said and done is a date object:
... Date ...
... 2001-04-30 ...
... 2005-08-31 ...
使得df ['Date'].item()返回
such that df['Date'].item() returns
datetime.date(2001, 04, 30)
我已经使用以下代码接近目标位置,但是我所有的日期都在月初,而不是月底.请告知.
I've used the following code to get almost there, but all my dates are at the beginning of the month, not the end. Please advise.
df['Date'] = pd.to_datetime(df['Date'], format="%Y%m").dt.date
注意:我已经导入了Pandas ad pd,日期时间为dt
Note: I've already imported Pandas ad pd, and datetime as dt
推荐答案
您可以使用 pandas.tseries.offsets.MonthEnd
:
You can use pandas.tseries.offsets.MonthEnd
:
from pandas.tseries.offsets import MonthEnd
df['Date'] = pd.to_datetime(df['Date'], format="%Y%m") + MonthEnd(1)
MonthEnd
中的 1
仅指定将一个步骤向前移动到下一个月底日期.(在您的情况下,也可以使用 0
或将其保留为空白).如果需要下个月的最后一天,则可以使用 MonthEnd(2)
等.此方法适用于任何月份,因此您无需知道该月的天数或类似的内容.可以在文档中找到更多的偏移量信息文档.
The 1
in MonthEnd
just specifies to move one step forward to the next date that's a month end. (Using 0
or leaving it blank would also work in your case). If you wanted the last day of the next month, you'd use MonthEnd(2)
, etc. This should work for any month, so you don't need to know the number days in the month, or anything like that. More offset information can be found in the 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
这篇关于查找Pandas DataFrame系列的月底的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!