【发布时间】:2017-02-20 06:31:11
【问题描述】:
我有开始和结束日期的列表,我想将它们转换成 1 个大数据框。
这是我想要实现的一个小的可复制示例
import pandas as pd
from pandas.tseries.offsets import *
import datetime as dt
dates = pd.DataFrame([[dt.datetime(2016,01,01),dt.datetime(2016,02,01)], [dt.datetime(2016,01,10), dt.datetime(2016,02,25)], [dt.datetime(2016,02,10), dt.datetime(2016,03,25)]], columns=['start', 'end'])
这给了我这样的开始和结束日期:
In[14]: dates
Out[14]:
start end
0 2016-01-01 2016-02-01
1 2016-01-10 2016-02-25
2 2016-02-10 2016-03-25
我正在尝试根据这些开始/结束日期创建一个包含工作日日期范围的数据框,并将它们附加在一起。
这就是我解决问题的方式,但它并没有太多的pythonic:
op_series = list()
for row in dates.itertuples():
time_range = pd.date_range(row.start, row.end, freq=BDay())
s = len(time_range)
op_series += (zip(time_range, [row.start]*s, [row.end]*s))
df = pd.DataFrame(op_series, columns=['date', 'start', 'end'])
In[4]: df.head()
Out[4]:
date start end
0 2016-01-01 2016-01-01 2016-02-01
1 2016-01-04 2016-01-01 2016-02-01
2 2016-01-05 2016-01-01 2016-02-01
3 2016-01-06 2016-01-01 2016-02-01
4 2016-01-07 2016-01-01 2016-02-01
有没有比创建数据列表并将它们粘合在一起更有效的方法?
谢谢!
【问题讨论】:
标签: python python-2.7 datetime pandas