Временные ряды Panda, показывающие конец рабочего месяца с учетом праздников - ValueError: Истинное значение DatetimeIndex неоднозначно - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь создать временную серию, используя панд, чтобы позволить мне фильтровать информационный фрейм. Я должен включать только данные, соответствующие первому и последнему рабочему дню каждого месяца. Я, однако, должен учитывать праздничные дни. На первом этапе я пытаюсь создать временную серию, которая содержит все даты окончания рабочего месяца, с учетом праздников. Мой запуск моего кода выглядит следующим образом (фильтрация еще не включена):

import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar as calendar

stocks = pd.read_csv('appl_1980_2014.csv')
stocks['Date']=pd.to_datetime(stocks['Date'])
stocks=stocks.set_index('Date',verify_integrity=True)

cal = calendar()
holidays = cal.holidays(start=stocks.tail(1).index[0], end=stocks.head(1).index[0])
a=pd.bdate_range(end=stocks.head(1).index[0], start=stocks.tail(1).index[0], freq='BM',holidays=holidays)

Когда я запускаю код, я получаю сообщение об ошибке:

 File "C:/Users/43153/Documents/General/ACE/pre-test/apple_stocks.py", line 17, in <module>
    a=pd.bdate_range(end=stocks.head(1).index[0], start=stocks.tail(1).index[0], freq='BM',holidays=holidays,weekmask=None)

  File "C:\ML\anaconda3\lib\site-packages\pandas\core\indexes\datetimes.py", line 1678, in bdate_range
    elif holidays or weekmask:

  File "C:\ML\anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2394, in __nonzero__
    self.__class__.__name__

ValueError: The truth value of a DatetimeIndex is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Что вызывает такое поведение? К сожалению, я пока не смог найти ответ в Интернете.

(Если у кого-нибудь есть более изящное предложение включить в рабочие ряды начало рабочих месяцев, мне было бы очень интересно сделать фильтрацию более простой. позже.)

1 Ответ

1 голос
/ 10 ноября 2019

Вы можете попробовать это,

>>> import pandas as pd
>>> from pandas.tseries.holiday import USFederalHolidayCalendar as calendar
>>> from pandas.tseries.offsets import CDay
>>> stocks = pd.read_csv('appl_1980_2014.csv')
>>> stocks['Date'] = pd.to_datetime(stocks['Date'])
>>> stocks = stocks.set_index('Date', verify_integrity=True)
>>> cal = calendar()
>>> week_days = pd.bdate_range(stocks.tail(1).index[0].date(), stocks.head(1).index[0].date(), freq=CDay(calendar=cal))
>>> first_days = pd.date_range(min(week_days), max(week_days), freq='BMS')
>>> last_days = pd.date_range(min(week_days), max(week_days), freq='BM')
>>> first_days.append(last_days)
DatetimeIndex(['1981-01-01', '1981-02-02', '1981-03-02', '1981-04-01',
               '1981-05-01', '1981-06-01', '1981-07-01', '1981-08-03',
               '1981-09-01', '1981-10-01',
               ...
               '2013-09-30', '2013-10-31', '2013-11-29', '2013-12-31',
               '2014-01-31', '2014-02-28', '2014-03-31', '2014-04-30',
               '2014-05-30', '2014-06-30'],
              dtype='datetime64[ns]', length=806, freq=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...