Python 使用循环使用DateOffSet计算不同天数的差异
在接下来的五个星期六享有盛名:Python 使用循环使用DateOffSet计算不同天数的差异,python,python-2.7,date,pandas,datetime,Python,Python 2.7,Date,Pandas,Datetime,在接下来的五个星期六享有盛名: start_date = 0 04.03.2017 1 11.03.2017 2 18.03.2017 3 25.03.2017 4 01.04.2017 还有一个我用来计算结束日期的列表 duration = [4, 8, 15, 22]. 我想创建一个基于开始日期加上持续时间的新框架,例如 start_date[0] = duration[0] = 07.03.2017 start_date[1] = duration[0]
start_date =
0 04.03.2017
1 11.03.2017
2 18.03.2017
3 25.03.2017
4 01.04.2017
还有一个我用来计算结束日期的列表
duration = [4, 8, 15, 22].
我想创建一个基于开始日期加上持续时间的新框架,例如
start_date[0] = duration[0] = 07.03.2017
start_date[1] = duration[0] = 11.03.2017
start_date[2] = duration[0] = 18.03.2017
...
我尝试使用pd.DateOffset解决此问题:
for j in range(len(duration)):
end_date = []
for i in start_dates:
# get offset date, convert it and append it to end_date list
z = pd.to_datetime(i) + pd.DateOffset(days=duration[(j)])
end_date.append(z.strftime("%d.%m.%Y"))
但是,我得到以下输出:
['07.04.2017', '07.11.2017', '22.03.2017', '29.03.2017', '08.01.2017']
问题在哪里?是因为DateOffset函数吗?不幸的是,我看不到关于出口的模式
有什么提示吗
谢谢,Mark问题不在于
DateOffset()
。问题是将日期字符串传递给熊猫时没有指定日期格式
所以熊猫在猜测日期格式。您应该做的是在使用时将format
参数传递到\u datetime()
使用try&error,我找到了另一个解决方案(已测试)
我知道,与之前发布的解决方案相比,它并没有那么优雅,但它也很有效 我没有考虑指定日期格式。这是有道理的。你的代码有效!非常感谢。
df
start_date
0 04.03.2017
1 11.03.2017
2 18.03.2017
3 25.03.2017
4 01.04.2017
df['py_start_date'] = pd.to_datetime(df['start_date'], format='%d.%m.%Y')
start_date py_start_date
0 04.03.2017 2017-03-04
1 11.03.2017 2017-03-11
2 18.03.2017 2017-03-18
3 25.03.2017 2017-03-25
4 01.04.2017 2017-04-01
for d in duration:
df['offset {}'.format(d)] = df['py_start_date'] + pd.DateOffset(days=d)
start_date py_start_date offset 4 offset 8 offset 15 offset 22
0 04.03.2017 2017-03-04 2017-03-08 2017-03-12 2017-03-19 2017-03-26
1 11.03.2017 2017-03-11 2017-03-15 2017-03-19 2017-03-26 2017-04-02
2 18.03.2017 2017-03-18 2017-03-22 2017-03-26 2017-04-02 2017-04-09
3 25.03.2017 2017-03-25 2017-03-29 2017-04-02 2017-04-09 2017-04-16
4 01.04.2017 2017-04-01 2017-04-05 2017-04-09 2017-04-16 2017-04-23
for j in range(len(duration)):
date_offset = []
for i in start_dates:
k = duration[j]
d = datetime.datetime.strptime(i, "%d.%m.%Y")
d = d + datetime.timedelta(days=k)
date_offset.append(d.strftime("%d.%m.%Y"))
# Transfer date_offset list into four seperate offset series depending on k
if k == 4:
offset_4 = pd.Series(date_offset)
elif k == 8:
offset_8 = pd.Series(date_offset)
elif k == 15:
offset_15 = pd.Series(date_offset)
else:
offset_22 = pd.Series(date_offset)