如何遍历 pandas-datareader 并为每个股票代码创建多个数据框?
How to iterate through pandas-datareader and create multiple dataframes for each stock ticker?
我想从代码名称列表中迭代创建多个数据框。
这是堆栈溢出 post 我正在引用:
我无法理解如何完成此操作,我觉得我在这里遗漏或误解了什么?
我写了下面的列表和字典
list_of_tickers = ['BAC','C','GS','JPM','MS','WFC']
dict_of_tickers = {name: pd.DataFrame() for name in list_of_tickers}
然而,当我 运行 这部分代码时,我得到以下错误:
for ticker, ticker_data in dict_of_tickers.items():
ticker_data = data.DataReader(ticker,'yahoo',start,end)
这为所有代码创建了一个单一的数据框,但不允许我区分它们,我觉得我在这里缺少一些关键逻辑。
ticker_data
只是一个变量,它会在 for
循环的每次迭代中创建并覆盖。那没有帮助。要更新您的字典,请明确地为键分配一个值:
for ticker in dict_of_tickers:
dict_of_tickers['ticker'] = data.DataReader(ticker, 'yahoo', start, end)
这假设 data.DataReader
returns 一个数据帧。请注意,我们迭代键,因为此分配不需要值(空数据框)。事实上,您 不需要 首先定义一个包含空数据框值的字典。只需使用单个字典理解:
dict_of_tickers = {ticker: data.DataReader(ticker, 'yahoo', start, end) \
for ticker in list_of_tickers}
我发现 DataReader 会迭代列表本身,因此不需要创建字典来迭代。
以下几行代码实现了我所寻求的,这是一种替代方法,可以从每个股票代码中连接多个数据帧,以避免为每个符号指定 DataReader。
- Sets the date ranges:
start = datetime.datetime(2006,1,1)
end = datetime.datetime(2016,1,1)
- Specifies the symbols:
list_of_tickers = ['BAC','C','GS','JPM','MS','WFC']
- Iterates over each ticker, creates a single multilevel column dataframe:
p = data.DataReader(list_of_tickers, 'yahoo', start, end)
- OPTIONAL: Then pivot the 'symbols' column level and replaces the Date index so it can be used in analysis:
res = p.stack().reset_index()
- OPTIONAL: This step isn't necessary and was purely for aesthetics to clean up the FrozenList and index names:
res.columns.names=[None]
res.index.names = ['ID']
我想从代码名称列表中迭代创建多个数据框。
这是堆栈溢出 post 我正在引用:
我无法理解如何完成此操作,我觉得我在这里遗漏或误解了什么?
我写了下面的列表和字典
list_of_tickers = ['BAC','C','GS','JPM','MS','WFC']
dict_of_tickers = {name: pd.DataFrame() for name in list_of_tickers}
然而,当我 运行 这部分代码时,我得到以下错误:
for ticker, ticker_data in dict_of_tickers.items():
ticker_data = data.DataReader(ticker,'yahoo',start,end)
这为所有代码创建了一个单一的数据框,但不允许我区分它们,我觉得我在这里缺少一些关键逻辑。
ticker_data
只是一个变量,它会在 for
循环的每次迭代中创建并覆盖。那没有帮助。要更新您的字典,请明确地为键分配一个值:
for ticker in dict_of_tickers:
dict_of_tickers['ticker'] = data.DataReader(ticker, 'yahoo', start, end)
这假设 data.DataReader
returns 一个数据帧。请注意,我们迭代键,因为此分配不需要值(空数据框)。事实上,您 不需要 首先定义一个包含空数据框值的字典。只需使用单个字典理解:
dict_of_tickers = {ticker: data.DataReader(ticker, 'yahoo', start, end) \
for ticker in list_of_tickers}
我发现 DataReader 会迭代列表本身,因此不需要创建字典来迭代。
以下几行代码实现了我所寻求的,这是一种替代方法,可以从每个股票代码中连接多个数据帧,以避免为每个符号指定 DataReader。
- Sets the date ranges:
start = datetime.datetime(2006,1,1)
end = datetime.datetime(2016,1,1)
- Specifies the symbols:
list_of_tickers = ['BAC','C','GS','JPM','MS','WFC']
- Iterates over each ticker, creates a single multilevel column dataframe:
p = data.DataReader(list_of_tickers, 'yahoo', start, end)
- OPTIONAL: Then pivot the 'symbols' column level and replaces the Date index so it can be used in analysis:
res = p.stack().reset_index()
- OPTIONAL: This step isn't necessary and was purely for aesthetics to clean up the FrozenList and index names:
res.columns.names=[None]
res.index.names = ['ID']