使用 Pandas 创建多个 DataFrame

Creating Multiple DataFrames with Pandas

有没有一种方法可以通过代码使用 'for loop' 或类似于 运行 的东西来创建多个具有 Pandas 的数据帧,我可以将其分配给单独的变量,而不是硬编码两个数据框?

如果我添加新的代码,继续对它们进行硬编码将不会很有效。

import pandas_datareader as pdr
from datetime import datetime

Equity_Tickers = ["FB", "MSFT"]

start = datetime(2018, 9, 15)
end = datetime.today().date()

# First DataFrame 
data = pdr.DataReader(Equity_Tickers[0], 'yahoo', start, end)
df = data[['Adj Close']]

# Second DataFrame
data = pdr.DataReader(Equity_Tickers[1], 'yahoo', start, end)
df1 = data[['Adj Close']]

您当然可以使用变量而不是对代码进行硬编码:

ticker = Equity_Tickers[0]  # FB
data = pdr.DataReader(ticker, 'yahoo', start, end)

要创建一个循环,您可以这样做:

for ticker in Equity_Tickers:
    data = pdr.DataReader(ticker, 'yahoo', start, end)
    df = data[['Adj Close']]

棘手的事情是在循环的每次迭代中存储 df 变量而不是覆盖它。一种解决方案是将每个 DataFrame 存储在列表或字典中。

frames = []
for ticker in Equity_Tickers:
    data = pdr.DataReader(ticker, 'yahoo', start, end)
    frames.append(data[['Adj Close']])

# eg, use frames[0] to access first ticker's DataFrame

frames = {}
for ticker in Equity_Tickers:
    data = pdr.DataReader(ticker, 'yahoo', start, end)
    frames[ticker] = data[['Adj Close']]

# eg, use frames['FB'] to access FB ticker's DataFrame

如果您真的很喜欢,也可以使用 list comprehension / 字典推导式在一行中完成此操作:

# list comprehension
frames = [pdr.DataReader(t, 'yahoo', start, end)[['Adj Close']] for t in Equity_Tickers]

# dict comprehension
frames = {t: pdr.DataReader(t, 'yahoo', start, end)[['Adj Close']] for t in Equity_Tickers}

附加说明:您还可以考虑将这些帧组合成一个大的 DataFrame,也许是一个 tidy-style DataFrame,其中 "ticker" 是每一行的一个字段。