python - 如何修复 OverflowError:int64 加法中的溢出
问题描述
我试图从列中减去列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
.
.
.
解决方案
OP 最有可能使用医疗 MIMIC 数据集,其中日期已被打乱以保护患者的身份。具体来说,对于 89 岁以上的患者,他们将出生日期推迟了 300 年。
使用 pandas timedelta 时,像这样的长时间跨度会导致溢出:
pd.to_timedelta(300, unit="Y", box=False)
> numpy.timedelta64(-8979658473709551616,'ns')
在数据框操作中发生这种情况时,您会遇到错误。根据@tawab_shakeel 的回答改编:
df = pd.DataFrame(data={"DOB":['2000-05-07','1965-01-30','1700-01-01'],
"date_of_admission":["2019-01-19 12:26:00","2019-03-21 02:23:12", "2000-01-01 02:23:23"]})
df['DOB'] = pd.to_datetime(df['DOB']).dt.date
df['date_of_admission'] = pd.to_datetime(df['date_of_admission']).dt.date
# Gives AttributeError: Can only use .dt accessor with datetimelike values
df['age'] = ((df['date_of_admission']-df['DOB']).dt.days) //365
# Gives OverflowError: long too big to convert
pd.to_timedelta(df['date_of_admission']-df['DOB'])
任何转换为timedelta64[ns]
数据类型的计算都会出现此问题。
作为一种解决方法,您可以改用apply
操作,直接计算每个元素的年龄元素:
df['age'] = df.apply(lambda e: (e['date_of_admission'] - e['DOB']).days/365, axis=1)
推荐阅读
- php - 如果以编程方式分配,PHP 在从前端(Vue 和 Laravel)接收后误解字符串
- typescript - vscode 调试 webpack + typescript + 参考
- javascript - 如何加入 .map 和 .filter 以过滤和删除对象数组中的重复项
- google-apps-script - 需要其他用户授权的表格容器绑定脚本,即使他们是文件的编辑者或所有者
- c++ - 在 Windows 10 上成功安装后,如何让 VSCode 找到 gmp.h?
- css - 使用顺风 css 时在哪里存储自定义 css 类
- r - mgcv GAM 绘图并通过因子平滑预测
- django - 无法启动没有错误的 Django 项目
- javascript - this.$refs 在 Nuxt 应用程序中返回未定义(尝试读取 div 的高度)
- python - 连接和排序