【问题标题】:pandas timedelta resample weeks fails熊猫 timedelta 重新采样周失败
【发布时间】:2016-08-06 02:07:00
【问题描述】:

实际问题

正如这个小示例所示,我尝试每周对 pandas 数据框重新采样:

import datetime
import pandas as pd

df = pd.DataFrame([{
    'A' : datetime.datetime.now() - datetime.datetime.now(),
    'B' : 2
},{
    'A' : datetime.datetime.now() - datetime.datetime.now(),
    'B' : 3
}])

df = df.set_index('A')

df.resample('W', how="mean")

这会抛出一个AttributeError:

AttributeError: 'Week' object has no attribute 'nanos'

(注意:如果我通过"D" 重新采样,则不会出现问题)

如果我改为将索引转换为日期时间:

df.index = pd.to_datetime(df.index.values)
df.resample('W', how="mean")

重采样也有效。
问题:是否有不依赖纳秒的 pandas timedelta 类型?
或者:你有还有比利用datetime 获取timedelta 更优雅的方法吗?


完整跟踪:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/pandas/core/generic.py", line 3266, in resample
    return sampler.resample(self).__finalize__(self)
  File "/Library/Python/2.7/site-packages/pandas/tseries/resample.py", line 98, in resample
    rs = self._resample_timestamps(kind='timedelta')
  File "/Library/Python/2.7/site-packages/pandas/tseries/resample.py", line 272, in _resample_timestamps
    self._get_binner_for_resample(kind=kind)
  File "/Library/Python/2.7/site-packages/pandas/tseries/resample.py", line 122, in _get_binner_for_resample
    self.binner, bins, binlabels = self._get_time_delta_bins(ax)
  File "/Library/Python/2.7/site-packages/pandas/tseries/resample.py", line 236, in _get_time_delta_bins
    name=ax.name)
  File "/Library/Python/2.7/site-packages/pandas/tseries/tdi.py", line 167, in __new__
    closed=closed)
  File "/Library/Python/2.7/site-packages/pandas/tseries/tdi.py", line 235, in _generate
    index = _generate_regular_range(start, end, periods, offset)
  File "/Library/Python/2.7/site-packages/pandas/tseries/tdi.py", line 895, in _generate_regular_range
    stride = offset.nanos
AttributeError: 'Week' object has no attribute 'nanos'

版本

>>> pd.__version__
'0.16.2'
>>> np.__version__
'1.10.1'

【问题讨论】:

    标签: python pandas resampling


    【解决方案1】:

    我相信区别在于 pandas 使用 numpy 的 datetime64 而 python datetime 类是不同的。当你打电话时

    df.index = pd.to_datetime(df.index.values)
    

    您正在从您创建的 datetime.datetime 对象转换为 resample 作为参数的 numpy.datetime64 对象。

    【讨论】:

    • 当然,但这如何回答我的问题?
    • 嗯,您的问题是: 问题:是否有不依赖纳秒的 pandas timedelta 类型?我的回答是:是的,numpy.datetime64 你还问:或者:你有什么比利用 datetime 来处理 timedelta 更优雅的方法吗?答案是:不,因为 numpy.datetime64 中没有与 datetime.datetime.now() 等价的东西。见docs.scipy.org/doc/numpy/reference/arrays.datetime.html
    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多