簡體   English   中英

Python Pandas中的TimeDeltas總和

[英]Sum overflow TimeDeltas in Python Pandas

在嘗試對大熊貓的時間增量求和時,它似乎適用於切片,但不適用於整個專欄。

>> d.ix[0:100, 'VOID-DAYS'].sum()
Timedelta('2113 days 00:00:00')

>> d['VOID-DAYS'].sum()


ValueError: overflow in timedelta operation

如果VOID-DAYS表示整數天數,則將Timedeltas轉換為整數:

df['VOID-DAYS'] = df['VOID-DAYS'].dt.days

import numpy as np
import pandas as pd
df = pd.DataFrame({'VOID-DAYS': pd.to_timedelta(np.ones((106752,)), unit='D')})
try:
    print(df['VOID-DAYS'].sum())
except ValueError as err:
    print(err)
    # overflow in timedelta operation


df['VOID-DAYS'] = df['VOID-DAYS'].dt.days
print(df['VOID-DAYS'].sum())
# 106752

如果Timedeltas包含秒或更小單位,則使用

df['VOID-DAYS'] = df['VOID-DAYS'].dt.total_seconds()

將值轉換為浮點數。


熊貓Timedeltas(系列和TimedeltaIndexes)將所有timedelta存儲為與NumPy的timedelta64[ns]兼容的整數。 此dtype使用8字節int來存儲時間增量(以納秒為單位)。

這種格式可表示的最大天數是

In [73]: int(float(np.iinfo(np.int64).max) / (10**9 * 3600 * 24))
Out[73]: 106751

這就是為什么

In [74]: pd.Series(pd.to_timedelta(np.ones((106752,)), unit='D')).sum()
ValueError: overflow in timedelta operation

引發ValueError ,但是

In [75]: pd.Series(pd.to_timedelta(np.ones((106751,)), unit='D')).sum()
Out[75]: Timedelta('106751 days 00:00:00')

才不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM