我需要一个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')
。我不确定是将它们转换为日期时间类型还是将它们分成两个不同的整数值。
关于如何正确实现它的任何想法?
答案 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_datetime
和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'))
使用.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