是否有一种方法可以使用“for循环”或类似的方法来在代码中运行,用我可以分配给不同变量的Pandas来创建多个DataFrames,而不是硬编码这两个DataFrames?
如果我添加新的代码,那么继续对它们进行硬编码是没有效率的。
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']]发布于 2018-12-04 00:30:04
当然,您可以使用一个变量,而不是硬编码代码:
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
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,可能是一个整洁风格的DataFrame,其中"ticker“是每一行的一个字段。
https://stackoverflow.com/questions/53603670
复制相似问题