0

对 Pandas 来说还是有点新,所以我想在这里学习本教程: 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 异常。为什么?

我确实尝试抛出一个.to_numpy()afterall_weekdays来满足异常消息,但它仍然给了我同样的异常,包括说它是一个 DatetimeArray。

到目前为止的调试让我认为它有问题,因为close系列轴设置为包含符号和日期列的 MultiIndex,如打印输出所示。

[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')

在重新索引之前,我是否需要强制一个索引与另一个索引匹配?如果是这样,我将如何去做?如果没有,在本教程中解除阻止我的等效解决方法是什么?

4

0 回答 0