如何使具有多索引轴值的Pandas系列采用DatetimeIndex进行重新索引?

2024-06-01 02:25:36 发布

您现在位置:Python中文网/ 问答频道 /正文

对熊猫来说还是有点陌生,所以我试着在这里学习这个教程: https://www.learndatasci.com/tutorials/python-finance-part-yahoo-finance-api-pandas-matplotlib/

但是,它似乎有点过时了,我不得不将数据源转换为从Tiingo提取。否则,尝试按原样遵循教程,每次调用reindex时都会遇到异常。例外情况如下:

...site-packages\pandas\core\indexes\multi.py", line 483, in from_tuples
arrays = list(lib.tuples_to_object_array(tuples).T)
TypeError: Argument 'tuples' has incorrect type (expected numpy.ndarray, got DatetimeArray)

这是我的代码版本。你知道吗

import pandas as pd
import pandas_datareader as pdr

start_date = '2019-8-27'
end_date = '2019-8-30'

panel_data = pdr.get_data_tiingo('GLD', start=start_date, end=end_date, api_key='[REDACTED]')
close = panel_data['close']
all_weekdays = pd.date_range(start=start_date, end=end_date, freq='B')
close = close.reindex(all_weekdays)

本教程使到目前为止的一切看起来都应该正常工作,但是在reindex()调用中出现了TypeError异常。为什么?

我确实尝试过在all_weekdays之后抛出一个.to_numpy()来满足异常消息,但它仍然给出了相同的异常,包括说它是一个DatetimeArray。你知道吗

到目前为止,调试使我认为它有问题,因为close系列轴被设置为包含符号和日期列的多索引,如打印输出所示。你知道吗

[MultiIndex([('GLD', '2019-08-27 00:00:00+00:00'),
            ('GLD', '2019-08-28 00:00:00+00:00'),
            ('GLD', '2019-08-29 00:00:00+00:00'),
            ('GLD', '2019-08-30 00:00:00+00:00')],
           names=['symbol', 'date'])]

如果它以DatetimeIndex的形式对一个简单的日期列表重新编制索引,那么它可能会遇到问题,即all_weekdays。你知道吗

DatetimeIndex(['2019-08-27', '2019-08-28', '2019-08-29', '2019-08-30'], dtype='datetime64[ns]', freq='B')

在重新索引之前,是否需要强制一个索引与另一个索引匹配?如果是的话,我该怎么做呢?如果没有,那么在本教程中有什么等效的解决方法可以解除我的阻止?你知道吗


Tags: toapipandasclosedatadate教程all