["python","date","datetime","pandas"]
Find the end of the month of a Pandas DataFrame Series

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. 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 ... 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 Note: I've already imported Pandas (pd), and datetime (dt)
You can use pandas.tseries.offsets.MonthEnd: from pandas.tseries.offsets import MonthEnd df['Date'] = pd.to_datetime(df['Date'], format="%Y%m") + MonthEnd(0) The 0 in MonthEnd just specifies to roll forward to the end of the given month. Note that if we'd used MonthEnd(1), then we'd have got the next date which is at the end of the month. If you wanted the last day of the next month, you'd then add an extra MonthEnd(1), 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. Example usage and output: 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