遍历 yfinance 代码列表的最快方法是什么?
What is the fastest way to iterate through a list of yfinance tickers?
我正在使用 python yfinance yahoo API 进行股票数据检索。现在我得到挂钩比率,这是一个公司价格与其增长和收益相关的指标。我从这里下载了一个 csv:https://www.nasdaq.com/market-activity/stocks/screener。
它正好有 8000 只股票。
我所做的是获取符号列表,并对其进行迭代以访问雅虎自动收报机。然后我得到一个使用 ticker.info 方法的 returns 字典。我通过 8000 个符号重复这个过程。它以每分钟 6 个符号的速度运行,这是不可行的。使用另一个 API 或其他结构是否有更快的方法?我不关心API,只要我能获得基本信息,如增长、收益、EPS 和那些东西。
代码如下:
import pandas as pd
import yfinance as yf
data = pd.read_csv("data/stock_list.csv")
symbols = data['Symbol']
for symbol in symbols:
stock = yf.Ticker(symbol)
try:
if stock.info['pegRatio']:
print(stock.info['shortName'] + " : " + str(stock.info['pegRatio']))
except KeyError:
pass
似乎需要Ticker.info属性中的某些数据时,会发出HTTP请求来获取它们。多线程将有助于改善问题。试试这个:-
import pandas as pd
import yfinance as yf
import concurrent.futures
data = pd.read_csv('data/stock_list.csv')
def getPR(symbol):
sn = None
pr = None
try:
stock = yf.Ticker(symbol)
pr = stock.info['pegRatio']
sn = stock.info['shortName']
except Exception:
pass
return (sn, pr)
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = {executor.submit(getPR, sym): sym for sym in data['Symbol']}
for future in concurrent.futures.as_completed(futures):
sn, pr = future.result()
if sn:
print(f'{sn} : {pr}')
我正在使用 python yfinance yahoo API 进行股票数据检索。现在我得到挂钩比率,这是一个公司价格与其增长和收益相关的指标。我从这里下载了一个 csv:https://www.nasdaq.com/market-activity/stocks/screener。 它正好有 8000 只股票。
我所做的是获取符号列表,并对其进行迭代以访问雅虎自动收报机。然后我得到一个使用 ticker.info 方法的 returns 字典。我通过 8000 个符号重复这个过程。它以每分钟 6 个符号的速度运行,这是不可行的。使用另一个 API 或其他结构是否有更快的方法?我不关心API,只要我能获得基本信息,如增长、收益、EPS 和那些东西。
代码如下:
import pandas as pd
import yfinance as yf
data = pd.read_csv("data/stock_list.csv")
symbols = data['Symbol']
for symbol in symbols:
stock = yf.Ticker(symbol)
try:
if stock.info['pegRatio']:
print(stock.info['shortName'] + " : " + str(stock.info['pegRatio']))
except KeyError:
pass
似乎需要Ticker.info属性中的某些数据时,会发出HTTP请求来获取它们。多线程将有助于改善问题。试试这个:-
import pandas as pd
import yfinance as yf
import concurrent.futures
data = pd.read_csv('data/stock_list.csv')
def getPR(symbol):
sn = None
pr = None
try:
stock = yf.Ticker(symbol)
pr = stock.info['pegRatio']
sn = stock.info['shortName']
except Exception:
pass
return (sn, pr)
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = {executor.submit(getPR, sym): sym for sym in data['Symbol']}
for future in concurrent.futures.as_completed(futures):
sn, pr = future.result()
if sn:
print(f'{sn} : {pr}')