我有一个行情清单,我想要输出带有熊猫数据阅读器财务信息的单个数据集。
我尝试创建一个简单的循环,该循环将一个报价器列表输入到pandas datareader函数中。
import pandas as pd
import pandas_datareader as pdr
myTickers = ['AAPL', 'PG']
for ticks in myTickers:
print(ticks)
ticks = pdr.DataReader(ticks, 'yahoo', start='2019-01-01', end='2019-01-08')['Adj Close']
这里的问题似乎是循环仅替换了DataReader函数中的myTickers值,而没有将数据框的名称从“滴答”更改为例如。 AAPL。这样,所有结果都会被最后的代码循环覆盖。
我需要修改什么才能使此循环输出代码列表中名称相同的两个不同数据帧?
答案 0 :(得分:0)
正如您所指出的,循环变量被遗忘了,因此需要存储在某个地方。您可以将ticks
中的myTickers
替换为对应的DataFrame。但是,对股票行情的引用将很有用。也许以下可能有帮助。
tickers_df_dict = {
ticks: pdr.DataReader(ticks, 'yahoo', start='2019-01-01', end='2019-01-08')['Adj Close']
for ticks in myTickers
}
话虽如此,据我所知,使用yahoo API将导致以下错误。您可能需要修改所选的数据源。
ImmediateDeprecationError : 由于该API的重大中断,因此Yahoo Daily已被立即弃用, 引入稳定的替代品。拉取请求以重新启用这些数据 欢迎使用连接器。
答案 1 :(得分:0)
在获得带有功能的数据框之类的列之后,您可以保存在DataFrame中。
import pandas as pd
import pandas_datareader as pdr
myTickers = ['AAPL', 'PG']
df=pd.DataFrame(columns=myTickers)
for ticks in myTickers:
df[ticks] = pdr.DataReader(ticks, 'yahoo', start='2019-01-01', end='2019-01-08')['Adj Close']
def ticks(s):
return df[s].to_frame()
ticks('AAPL')
输出:
AAPL
Date
2019-01-02 156.049484
2019-01-03 140.505798
2019-01-04 146.503891
2019-01-07 146.177811
2019-01-08 148.964386
ticks('PG')
输出:
PG
Date
2019-01-02 89.350105
2019-01-03 88.723633
2019-01-04 90.534523
2019-01-07 90.172348
2019-01-08 90.505157