我试图从df['DOB']
列减去df['date_of_admission']
列,以找出两者之间的差值,并将年龄值存储在df['age']
列中,但是,我得到了以下错误:
溢出错误: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
.
.
.
6条答案
按热度按时间fwzugrvs1#
OP最有可能使用医学MIMIC数据集,其中的日期被打乱以保护患者的身份,特别是对于89岁以上的患者,they shifted the date of birth by 300 years。
使用pandas timedelta时,像这样的长时间跨度会给予溢出:
当这种情况发生在 Dataframe 操作中时,你会遇到一个错误。根据@tawab_shakeel的回答改编:
转换为
timedelta64[ns]
数据类型的任何计算都会出现此问题。作为解决方法,您可以改用
apply
运算,直接计算每个元素的年龄元素:91zkwejq2#
将两列都转换为日期,然后相减
第二次测试
结果:
bt1cpqcv3#
1).您做得很正确,但是
DOB
只包含日期,并且date_of_admission
同时包含日期和时间。操作date_of_admission
,使其只包含日期,然后您将得到您的结果。2).在这里,我将
change function
添加到您的代码中,以便您可以得到您的结果。希望对你有帮助。
biswetbf4#
我正在使用MIMIC III数据集,也遇到了这个问题。我发现@Rahul_chacharan关于使用
df['date_of_admission'].subtract(df['DOB']).dt.days // 365
的评论对我很有效!l7wslrjt5#
我想我们在处理MIMIC3数据库时都会遇到这个问题,下面是我的解决方案,非常直观,而且速度快得多,大家可以试试。
我的想法是把它转换成numpy int,然后从ns转换成years.Pandas日期diff函数对我来说不起作用,使用apply太慢了(我认为只是循环)。
n9vozmp46#
对于从@tawab_shakeel的答案中得到错误
AttributeError: Can only use .dt accessor with datetimelike values
的用户,请尝试以下代码它将返回int值作为年龄