【问题标题】:pandas : reduction of timedelta64 using sum() results in int64?pandas:使用 sum() 减少 timedelta64 会导致 int64?
【发布时间】:2014-02-24 20:15:36
【问题描述】:

根据pandas 0.13.1手册,可以减少一个numpy timedelta64系列:

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#time-deltas-reductions

这似乎适用于例如mean()

In[107]:
pd.Series(np.random.randint(0,100000,100).astype("timedelta64[ns]")).mean()
Out[107]:
0   00:00:00.000047
dtype: timedelta64[ns]

但是,使用sum(),这总是会产生一个整数:

In [108]:
pd.Series(np.random.randint(0,100000,100).astype("timedelta64[ns]")).sum()
Out[108]:
5047226

这是一个错误,还是存在例如导致这种情况的溢出?将结果转换为timedelta64 是否安全?我将如何解决这个问题?

我正在使用 numpy 1.8.0。

【问题讨论】:

    标签: numpy pandas


    【解决方案1】:

    看起来像一个错误,刚刚提交了这个:https://github.com/pydata/pandas/issues/6462

    结果以纳秒为单位;作为一种解决方法,您可以这样做:

    In [1]: s = pd.to_timedelta(range(4),unit='d')
    
    In [2]: s
    Out[2]: 
    0   0 days
    1   1 days
    2   2 days
    3   3 days
    dtype: timedelta64[ns]
    
    In [3]: s.mean()
    Out[3]: 
    0   1 days, 12:00:00
    dtype: timedelta64[ns]
    
    In [4]: s.sum()
    Out[4]: 518400000000000
    
    In [8]: pd.to_timedelta([s.sum()])
    Out[8]: 
    0   6 days
    dtype: timedelta64[ns]
    

    【讨论】:

    • 谢谢;我的解决方法略有不同;首先转换所有内容,即s = s / np.timedelta64(1,"ms"),所以所有内容都以毫秒为单位,然后是s.sum()
    • 啊,错误解释了它。我正要用这个把头发扯掉!谢谢@Jeff 和@Luciano!
    • 这已在 master/0.14 中修复(即将推出)。
    猜你喜欢
    • 2011-12-29
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2021-12-19
    • 2023-02-02
    相关资源
    最近更新 更多