Как исправить OverflowError: переполнение в добавлении int64 - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь вычесть столбец df['date_of_admission'] из столбца df['DOB'], чтобы найти разницу между ними и сохранить значение возраста в столбце df['age'], однако я получаю эту ошибку:

OverflowError: переполнение при добавлении int64

 DOB          date_of_admission      age
 2000-05-07   2019-01-19 12:26:00        
 1965-01-30   2019-03-21 02:23:12        
 NaT          2018-11-02 18:30:10        
 1981-05-01   2019-05-08 12:26:00       
 1957-01-10   2018-12-31 04:01:15         
 1968-07-14   2019-01-28 15:05:09            
 NaT          2018-04-13 06:20:01 
 NaT          2019-02-15 01:01:57 
 2001-02-10   2019-03-21 08:22:00       
 1990-03-29   2018-11-29 03:05:03
.....         ......
.....         .....
.....         .....

Я пробовал это со следующим:

import numpy as np
import pandas as pd
from datetime import dt

df['age'] = (df['date_of_admission'] - df['DOB']).dt.days // 365

Ожидается получение следующего столбца возраста после нахождения разницы между:

age
26
69
NaN
58
.
.
.

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Конвертируйте оба столбца в дату, затем вычтите ее

import pandas as pd


df['date_of_admission'] = pd.to_datetime(df['date_of_admission']).dt.date

df['DOB'] = pd.to_datetime(df['DOB']).dt.date

df['age'] = ((df['date_of_admission']-df['DOB']).dt.days) //365

ВТОРОЙ ТЕСТ

#Now I have use DOB AND date_of_admission data from the question and it is working fine

df = pd.DataFrame(data={"DOB":['2000-05-07','1965-01-30','NaT'],
                   "date_of_admission":["2019-01-19 12:26:00","2019-03-21 02:23:12", "2018-11-02 18:30:10"]})

df['DOB'] = pd.to_datetime(df['DOB']).dt.date
df['date_of_admission'] = pd.to_datetime(df['date_of_admission']).dt.date
df['age'] = ((df['date_of_admission']-df['DOB']).dt.days) //365

РЕЗУЛЬТАТ:

DOB       date_of_admission   age
2000-05-07  2019-01-19       18.0
1965-01-30  2019-03-21       54.0
NaT         2018-11-02       NaN
1 голос
/ 23 июня 2019

1).Вы делаете это правильно, но DOB содержит единственную дату, а date_of_admission содержит и дату, и время.Манипулируйте date_of_admission, чтобы он содержал только дату, тогда вы получите свой результат.

2).Здесь я добавляю change function в ваш код, чтобы вы получили свой результат.

import numpy as np
import pandas as pd
from datetime import dt

def change(x):
    return x.date()

df['date_of_admission'] = df['date_of_admission'].apply(change)

df['age'] = df['date_of_admission'].subtract(df['DOB']).dt.days // 365

Надеюсь, это поможет вам.

...