返回包含日期范围的数据框

时间:2017-09-05 23:51:58

标签: python pandas date dataframe

我需要一个Python函数来返回一个带有日期范围的Pandas DataFrame,例如从2016年11月到2017年3月的年份和月份,结果如下:

year  month
2016     11
2016     12
2017     01
2017     02
2017     03

我的日期采用字符串格式Y-m (from = '2016-11', to = '2017-03')。我不确定是将它们转换为日期时间类型还是将它们分成两个不同的整数值。

关于如何正确实现它的任何想法?

3 个答案:

答案 0 :(得分:1)

你在看这样的事吗?

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

你得到了

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

获取数据框

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

答案 1 :(得分:1)

您可以使用pd.to_datetimepd.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'))

使用.dt访问者属性构建数据框。

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

答案 2 :(得分:1)

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