I have a DataFrame with numbers (‘number’) and I wanted to add these numbers to a date. Unfortunately my attempts don’t work and I always get error messages no matter how I try….
This is a code example how I tried it:
JavaScript
x
7
1
from datetime import datetime
2
number = pd.DataFrame({'date1': ['7053','0','16419','7112','-2406','2513','8439','-180','13000','150','1096','15150','3875','-10281']})
3
number
4
5
df = datetime(2010, 1, 1) + number['date1']
6
df
7
As an example of the result (YYYY/MM/DD) should come out a column or DataFrame with a date, which results from the calculation “start date + number”.
JavaScript
1
3
1
result = pd.DataFrame({'result': ['2001/03/01','1981/11/08','1975/04/08','2023/05/02']})
2
result
3
Currently the numbers are in the df ‘number’ type object. Then I get this error message.
JavaScript
1
2
1
unsupported operand type(s) for +: 'numpy.ndarray' and 'Timestamp'
2
If I change df ‘number’ to str or int64, I get this error message.
JavaScript
1
2
1
addition/subtraction of integers and integer-arrays with timestamp is no longer supported. instead of adding/subtracting `n`, use `n * obj.freq`
2
What am I doing wrong or can someone help me?
Thanks a lot!
Advertisement
Answer
If need add days by original column to 2010-01-01
use to_datetime
:
JavaScript
1
18
18
1
number['date1'] = pd.to_datetime(number['date1'].astype(int), unit='d', origin='2010-01-01')
2
print (number)
3
date1
4
0 2029-04-24
5
1 2010-01-01
6
2 2054-12-15
7
3 2029-06-22
8
4 2003-06-01
9
5 2016-11-18
10
6 2033-02-08
11
7 2009-07-05
12
8 2045-08-05
13
9 2010-05-31
14
10 2013-01-01
15
11 2051-06-25
16
12 2020-08-11
17
13 1981-11-08
18
For format YYYY/MM/DD
add Series.dt.strftime
:
JavaScript
1
19
19
1
number['date1'] = pd.to_datetime(number['date1'].astype(int), unit='d', origin='2010-01-01').dt.strftime('%Y/%m/%d')
2
print (number)
3
4
date1
5
0 2029/04/24
6
1 2010/01/01
7
2 2054/12/15
8
3 2029/06/22
9
4 2003/06/01
10
5 2016/11/18
11
6 2033/02/08
12
7 2009/07/05
13
8 2045/08/05
14
9 2010/05/31
15
10 2013/01/01
16
11 2051/06/25
17
12 2020/08/11
18
13 1981/11/08
19