绕过“OverflowerError:int64添加中的溢出”

628mspwn  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(429)

我在Pandas公司工作,试图减去两列日期,得到它们之间的时间长度(最好以月为单位,但任何较小的单位都可以)。我的原始数据框有90000多行,因此我正在使用大约2000行的修剪版本的数据框。这是个坏消息,因为我在较小的数据框上遇到了过大的问题(我认为?)。
以下是我的数据标题:

Variety        CropYear      DatePurchased         birthDate
0  AU Vic Secret™      2014  2016-03-01 23:51:27.822    2016-03-01
1  AU Vic Secret™      2014  2016-03-02 22:22:33.285    2016-03-01
2  AU Vic Secret™      2014  2016-03-04 17:03:33.247    2016-03-01
3  AU Vic Secret™      2014  2016-03-04 20:09:35.840    2016-03-01
4  AU Vic Secret™      2014  2016-03-07 14:09:36.502    2016-03-01

这就是我得到的错误:
溢出错误:int64加法中溢出

data["birthDate"] = pd.to_datetime(data["birthDate"])

data["DatePurchased"] = pd.to_datetime(data["DatePurchased"])

data["Age"] = data["DatePurchased"] - data["birthDate"]

然后我试着补充 .dt.date 因为我在这个网站的另一篇文章中看到了这一点,并盲目地希望它能起作用。它产生了这个错误
溢出错误:python int太大,无法转换为c long

data["birthDate"] = pd.to_datetime(data["birthDate"]).dt.date

data["DatePurchased"] = pd.to_datetime(data["DatePurchased"]).dt.date

data["Age"] = data["DatePurchased"] - data["birthDate"]

这些错误意味着什么?如何解决这些问题,尤其是对于一个9-10万行的 Dataframe ?

i86rm4rw

i86rm4rw1#

计算天数,而不是按当前方式减去2个datetime列后得到的较长格式“0天…”:

df = pd.DataFrame({'DatePurchased':['2016-03-01 23:51:27.822', '2016-03-02 22:22:33.285', '2020-05-20 03:52:12.739'], 'birthDate': ['2016-03-01', '2016-03-01', '2019-08-01']})

df['DatePurchased'] = pd.to_datetime(df['DatePurchased'], infer_datetime_format=True)
df['birthDate'] = pd.to_datetime(df['birthDate'], infer_datetime_format=True)

df['Age'] = df['DatePurchased'] - df['birthDate']
df['Age_days'] = (df['DatePurchased'] - df['birthDate']).dt.days

请注意年龄格式之间的差异:

DatePurchased  birthDate                      Age  Age_days
0 2016-03-01 23:51:27.822 2016-03-01   0 days 23:51:27.822000         0
1 2016-03-02 22:22:33.285 2016-03-01   1 days 22:22:33.285000         1
2 2020-05-20 03:52:12.739 2019-08-01 293 days 03:52:12.739000       293

相关问题