Я хочу пересчитать мой фрейм данных, чтобы разрешение менялось с минут на часы. Эта повторная выборка должна происходить только в рабочее время. Однако при использовании встроенного объекта из 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, но он доступен только для чтения, поэтому я не могу адаптировать его таким образом.