使用 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" 是每一行的一个字段。
有没有一种方法可以通过代码使用 '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" 是每一行的一个字段。