Python 循环导入并通过Yahoo Finance以各自的名称保存每个股票

Python 循环导入并通过Yahoo Finance以各自的名称保存每个股票,python,loops,yahoo-finance,pandas-datareader,Python,Loops,Yahoo Finance,Pandas Datareader,我有一个疑问: 我正在使用雅虎金融导入一些股票的信息。我有一个“股票代码”列表,其中有要导入的股票名称,我使用pdr.get_data_yahoo。我的代码如下: import pandas as pd import datetime as dt import pandas_datareader as pdr ticker = ['AAPL', 'AMZN', 'FB'] # Acciones start = dt.datetime(2020, 11, 21) # Desde end =

我有一个疑问: 我正在使用雅虎金融导入一些股票的信息。我有一个“股票代码”列表,其中有要导入的股票名称,我使用pdr.get_data_yahoo。我的代码如下:

import pandas as pd
import datetime as dt
import pandas_datareader as pdr 

ticker = ['AAPL', 'AMZN', 'FB'] # Acciones

start = dt.datetime(2020, 11, 21) # Desde
end = dt.datetime(2020, 12, 4) # Hasta

AAPL = pdr.get_data_yahoo('AAPL', start = start, end = end) # a)
AMZN = pdr.get_data_yahoo('AMZN', start = start, end = end) # b)
FB   = pdr.get_data_yahoo('FB', start = start, end = end) # c)
我如何通过循环或迭代将每个操作的信息保存在一个变量中,并使用其各自的名称(等于股票代码的str),而不是像a)、b)和c)中那样逐个导入股票。也就是说,我希望能够修改和/或添加操作到ticker,并且每个操作都以各自的名称保存

我在试一个像这样的循环

ticker = ['AAPL', 'AMZN', 'FB', 'MSFT', 'AAL']
for ticker in tickers:
ticker[i] = pdr.get_data_yahoo(ticker, start = start, end = end)

您可以使用字典并保存包含股票代码名称的股票代码数据

例如:

import pandas as pd
import datetime as dt
import pandas_datareader as pdr 

ticker = ['AAPL', 'AMZN', 'FB'] # Acciones
ticker_data = {}
start = dt.datetime(2020, 11, 21) # Desde
end = dt.datetime(2020, 12, 4) # Hasta

for ticker in tickers:
    ticker_data[ticker] = pdr.get_data_yahoo(ticker, start = start, end = end)

print(ticker_data)
你有两个问题

  • 第一:
    ticker
    是一个列表,所以您不能将其用作口述
    ticker[i]

  • 第二:您使用了
    tickers
    (与
    s
    )但没有此变量

你只是把两个相似的名字弄乱了。我将使用name
all_ticker
ticker
更好地显示问题

并使用字典查询结果

all_tickers = ['AAPL', 'AMZN', 'FB', 'MSFT', 'AAL']
results = {}

for ticker in all_tickers:
    results[ticker] = pdr.get_data_yahoo(ticker, start=start, end=end)

编辑:

不要使用变量
AAPL
AMZN
FB
,但要将其作为
results[“AAPL”]
results[“AMZN”]
results[“FB”]

通常你会用这样的票工作

for ticker in all_tickers:
    print(ticker, results[ticker])

等等

如果您将新的
票证
添加到
所有票证
中,则其余代码的工作方式相同



最终,您可以将所有内容添加到pandas.DataFrame中,然后您可以使用所有值,即使不使用
for
-循环。

创建一个字典,将ticker名称作为键,将DataFrame作为值,然后您可以引用每个键来获取每个数据帧,例如:
my_dfs={ticker:pdr.get_data\u yahoo(ticker,start=start,end=end)对于tickers}
中的ticker,然后执行
my_dfs['AAPL']
以获取相应的数据帧,您不能使用
ticker[i]
,因为
ticker
是列表,而不是字典。您可以将列表更改为字典,或者使用其他字典
result={}
result[i]=pdr.get\u数据(ticker,start=start,end=end)
非常感谢您的回复Furas。但是您如何使用循环或迭代将每个股票的信息保存在一个带有股票名称(与股票代码中显示的名称相同)的变量中?例如,来自ticker=['AAPL',AMZN',FB']创建三个变量AAPL、AMZN和FB,每一个变量中都包含该股票的信息。这样你就可以更改或添加股票代码,循环就可以继续运行。不要使用变量
AAPL
AMZN
FB
,而是将其作为
results[/AAPL]
results[/AMZN]
results[“FB”]
非常感谢您的回复Harshana Serasinghe。但是,您如何使用循环或迭代将每个股票的信息保存在一个带有股票名称(与股票代码中显示的名称相同)的变量中?例如,from ticker=['AAPL','AMZN',FB']创建三个变量AAPL、AMZN和FB,每个变量中都包含该股票的信息。这样一来,你就可以更改或添加股票代码,循环就可以继续工作了
max_value = {}

for ticker in all_tickers:
    max_value[ticker] = max( results[ticker] )
    #print('max value for', ticker, 'is', max_value[ticker])

for ticker in all_tickers:
    print('max value for', ticker, 'is', max_value[ticker])
my_favorite = ['AMZN', 'FB']

for ticker in my_favorite:
    print(ticker, results[ticker])