ValueError при повторной выборке кадра данных Pandas 'с частотой BusinessHour - PullRequest
0 голосов
/ 09 июля 2020

Я хочу пересчитать мой фрейм данных, чтобы разрешение менялось с минут на часы. Эта повторная выборка должна происходить только в рабочее время. Однако при использовании встроенного объекта из Pandas я сталкиваюсь с ошибкой ValueError. Это странно, потому что это работает, когда используется объект смещения часов. См. Мои шаги ниже.

>>> import yfinance as yf

>>> import pandas as pd
>>> from pandas.tseries.offsets import Hour, BusinessHour


# Example data with 5 minute interval
>>> mydata = yf.Ticker('ABN.AS').history(interval='5m', period='1mo', start='2020-06-01')

Передискретизация mydata с объектом смещения часов Pandas, процесс работает должным образом.

>>> mydatahour = mydata.resample(Hour()).mean()
                               Open      High       Low     Close         Volume  Dividends  Stock Splits
Datetime
2020-06-01 09:00:00+02:00  7.610833  7.648333  7.588333  7.625000  235704.416667        0.0           0.0
2020-06-01 10:00:00+02:00  7.580000  7.602500  7.551667  7.580000  139965.166667        0.0           0.0
2020-06-01 11:00:00+02:00  7.621667  7.634167  7.608333  7.620833   88396.833333        0.0           0.0
2020-06-01 12:00:00+02:00  7.581667  7.595000  7.570000  7.581667   49044.166667        0.0           0.0
2020-06-01 13:00:00+02:00  7.622500  7.628333  7.615833  7.621667   44186.666667        0.0           0.0
...                             ...       ...       ...       ...            ...        ...           ...
2020-07-09 09:00:00+02:00  8.000000  8.015000  7.973333  7.989167   59975.333333        0.0           0.0
2020-07-09 10:00:00+02:00  7.970000  7.976667  7.952500  7.965000   26809.250000        0.0           0.0
2020-07-09 11:00:00+02:00  7.920000  7.927500  7.909167  7.915833   18170.166667        0.0           0.0
2020-07-09 12:00:00+02:00  7.892500  7.900000  7.885000  7.891667   22465.583333        0.0           0.0
2020-07-09 13:00:00+02:00  7.887692  7.893846  7.880769  7.889231   18324.153846        0.0           0.0

Передискретизация mydata с Pandas 'Объект BusinessHour генерирует следующее исключение:

>>> mydatahour = mydata.resample(BusinessHour()).mean()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\bramb\Documents\codes\fanalysis\.venv\lib\site-packages\pandas\core\resample.py", line 937, in g
    return self._downsample(_method)
  File "C:\Users\bramb\Documents\codes\fanalysis\.venv\lib\site-packages\pandas\core\resample.py", line 1020, in _downsample
    self._set_binner()
  File "C:\Users\bramb\Documents\codes\fanalysis\.venv\lib\site-packages\pandas\core\resample.py", line 178, in _set_binner
    self.binner, self.grouper = self._get_binner()
  File "C:\Users\bramb\Documents\codes\fanalysis\.venv\lib\site-packages\pandas\core\resample.py", line 186, in _get_binner
    binner, bins, binlabels = self._get_binner_for_time()
  File "C:\Users\bramb\Documents\codes\fanalysis\.venv\lib\site-packages\pandas\core\resample.py", line 1009, in _get_binner_for_time
    return self.groupby._get_time_bins(self.ax)
  File "C:\Users\bramb\Documents\codes\fanalysis\.venv\lib\site-packages\pandas\core\resample.py", line 1449, in _get_time_bins
    ax_values, bin_edges, self.closed, hasnans=ax.hasnans
  File "pandas\_libs\lib.pyx", line 673, in pandas._libs.lib.generate_bins_dt64
ValueError: Values falls after last bin

Использование Pandas groupby на mydata даст мне ту же ошибку, что и выше, при использовании объекта Grouper с частотой рабочих часов (' BH ').

>>> mydatahour2 = mydata.groupby(pd.Grouper(freq='BH')).mean()

Почему я получаю это исключение и как я могу найти обходной путь? Я попытался создать подмножество объекта смещения часов pandas, но он доступен только для чтения, поэтому я не могу адаптировать его таким образом.

...