关于python:在dt.datetime中添加两个字符串

Adding two strings together in dt.datetime

本问题已经有最佳答案,请猛点这里访问。

我有:

1
excessmove_start = '2015-1-6'

我想要一个新的变量,叫做excess_graph,它总是比excessmove_start提前3个月。

因此,对于这个例子,我的预期输出是:

1
excess_graph = '2015-4-6'


这将做的工作: P / < >

1
2
3
4
5
6
7
from datetime import datetime
from dateutil.relativedelta import relativedelta

excessmove_start = '2015-1-6'
s = datetime.strptime(excessmove_start,"%Y-%m-%d")
excess_graph= s+ relativedelta(months=+3)
print(excess_graph.strftime("%Y-%m-%d"))

这个打印 P / < >

1
2015-04-06


让我们s的样品pd.Seriesof stings,看起来像dates P / < >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dates = pd.date_range('2016-01-01', '2016-12-31')
s = pd.Series(np.sort(np.random.choice(dates, 10))).dt.strftime('%Y-%m-%d')
s

0    2016-01-08
1    2016-01-13
2    2016-02-08
3    2016-03-31
4    2016-04-02
5    2016-04-16
6    2016-06-07
7    2016-06-14
8    2016-10-13
9    2016-12-20
dtype: object

你可以使用pd.offsets添加的3个月之后 P / < >

1
2
3
4
5
6
7
8
9
10
11
12
13
pd.to_datetime(s) + pd.offsets.DateOffset(months=3)

0   2016-04-08
1   2016-04-13
2   2016-05-08
3   2016-06-30
4   2016-07-02
5   2016-07-16
6   2016-09-07
7   2016-09-14
8   2017-01-13
9   2017-03-20
dtype: datetime64[ns]

你可以把他们回到字符串 P / < >

1
2
3
4
5
6
7
8
9
10
11
12
13
(pd.to_datetime(s) + pd.offsets.DateOffset(months=3)).dt.strftime('%Y-%m-%d')

0    2016-04-08
1    2016-04-13
2    2016-05-08
3    2016-06-30
4    2016-07-02
5    2016-07-16
6    2016-09-07
7    2016-09-14
8    2017-01-13
9    2017-03-20
dtype: object

我们可以把它的所有在一起,看到,它所有的作品了 P / < >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
xs_start = pd.to_datetime(s)
offset = pd.offsets.DateOffset(months=3)
xs_graph = xs_start + offset

check = pd.DataFrame(dict(
    excessmove_start=xs_start,
    excess_graph=xs_graph,
    delta=xs_graph - xs_start
))

check

    delta excess_graph excessmove_start
0 91 days   2016-04-08       2016-01-08
1 91 days   2016-04-13       2016-01-13
2 90 days   2016-05-08       2016-02-08
3 91 days   2016-06-30       2016-03-31
4 91 days   2016-07-02       2016-04-02
5 91 days   2016-07-16       2016-04-16
6 92 days   2016-09-07       2016-06-07
7 92 days   2016-09-14       2016-06-14
8 92 days   2017-01-13       2016-10-13
9 90 days   2017-03-20       2016-12-20


使用relativedelta: P / < >

1
2
3
4
import dateutil

excessmove_start = date(2015,1,6)
excess_graph = excessmove_start + datetime.relativedelta.relativedelta(months=3))