Skip to content Skip to sidebar Skip to footer

Return Dataframe With Range Of Dates

I need a Python function to return a Pandas DataFrame with range of dates, only year and month, for example, from November 2016 to March 2017 and have this as result: year month 2

Solution 1:

Are you looking at something like this?

pd.date_range('November 2016', 'April 2017', freq = 'M')

You get

DatetimeIndex(['2016-11-30', '2016-12-31', '2017-01-31', '2017-02-28',
           '2017-03-31'],
          dtype='datetime64[ns]', freq='M')

To get dataframe

index = pd.date_range('November 2016', 'April 2017', freq = 'M')
df = pd.DataFrame(index = index)

Solution 2:

pd.Series(pd.date_range('2016-11', '2017-4', freq='M').strftime('%Y-%m')) \
  .str.split('-', expand=True) \
  .rename(columns={0: 'year', 1: 'month'})

    year    month
0   2016    11
1   2016    12
2   2017    01
3   2017    02
4   2017    03

Solution 3:

You can use a combination of pd.to_datetime and pd.date_range.

import pandas as pd

start = 'November 2016' 
end = 'March 2017'

s = pd.Series(pd.date_range(*(pd.to_datetime([start, end]) \
                                      + pd.offsets.MonthEnd()), freq='1M'))

Construct a dataframe using the .dt accessor attributes.

df = pd.DataFrame({'year' : s.dt.year, 'month' : s.dt.month})    
df

   month  year
0     11  2016
1     12  2016
2      1  2017
3      2  2017
4      3  2017

Post a Comment for "Return Dataframe With Range Of Dates"