2013-06-21 3 views
2

Я вижу следующее поведение при использовании DateOffset в пандах.потеря времени информация с dateoffset и bdate_range в pandas

In [25]: 

import pandas as pnd 
d = pnd.Timestamp('2013-01-01 16:00') 
dates = pnd.bdate_range(start=d, end=d+pnd.DateOffset(days=5)) 
for d1 in dates : 
    print d1 
2013-01-01 00:00:00 
2013-01-02 00:00:00 
2013-01-03 00:00:00 
2013-01-04 00:00:00 

Я теряю информацию о времени. Есть ли это способ произвести диапазон дат, который выглядит,

2013-01-01 16:00:00 
2013-01-02 16:00:00 
2013-01-03 16:00:00 
2013-01-04 16:00:00 

ответ

1

Вы можете использовать normalize аргумент bdate_range (который по умолчанию True):

In [11]: dates = pnd.bdate_range(start=d, end=d+pnd.DateOffset(days=5), normalize=False) 

In [12]: for d1 in dates : 
      print d1 
2013-01-01 16:00:00 
2013-01-02 16:00:00 
2013-01-03 16:00:00 
2013-01-04 16:00:00 

Примечание: некоторые аналогичные функции имеют аналогичный аргумент base.

+0

hmmm ... Я не знал о нормализации – nitin

+0

Это не в онлайн-документах, вы нужно проверить 'help (pd.bdate_range)' :) –

1

Вы можете сделать это с помощью date_range проще !:

import pandas as pnd 
d = '2013-01-01 16:00' 
dates = pnd.date_range(d, periods=5, freq='D') 

показать выход:

>>> for i in dates: print i 
... 
2013-01-01 16:00:00 
2013-01-02 16:00:00 
2013-01-03 16:00:00 
2013-01-04 16:00:00 
2013-01-05 16:00:00 

Как Энди отметил, что вы можете сделать это с помощью bdate_range, но я предпочитаю этот метод из-за его простоты и удобочитаемости

+0

Однако результаты разные, так как 'bdate_range' включает только рабочие дни (что еще более понятно, если вы берете немного больший диапазон, например. 10), так получилось, что 2013-01-05 был субботой, поэтому почему он находится в вашем, но не моем или OP. :) –

+0

никогда не использовал 'bdate_range' раньше, угадайте, теперь я знаю, что это за ха-ха –

Смежные вопросы