2016-04-14 8 views
3

Актуальна

Как и в этом маленьком примере, я стараюсь еженедельным RESAMPLE на панд dataframe:панды timedelta RESAMPLE недели терпит неудачу

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", проблема не возникает)

Если вместо этого я бросил индекс к DateTime:

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

повторной дискретизации работает, как хорошо.
Вопрос: Есть ли тип pandas timedelta, который не полагается на nano секунд?
Or: У вас есть более элегантный способ, чем использовать 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' 

ответ

0

Я считаю, что разница в том, что панды использует datetime64 Numpy в то время как класс питона DateTime что-то другое. Когда вы звоните

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

вы литье из объекта datetime.datetime, который вы создали для объекта numpy.datetime64, что RESAMPLE принимает в качестве аргумента.

+0

уверен, но как это отвечает на мои вопросы? –

+0

Ну, на ваш вопрос было: Вопрос: Есть ли тип pandas timedelta, который не полагается на nano секунд? На что я ответил: Да, numpy.datetime64 Вы также спросили: Или: Есть ли у вас есть какие-либо более элегантный способ, чем использовать DateTime для timedelta? Ответ на этот вопрос: Нет, поскольку в numpy.datetime64 нет эквивалента datetime.datetime.now(). См. Http://docs.scipy.org/doc/numpy/reference/arrays.datetime.html. – kingledion