yfinance 作为 pandas_finance 的替代品

yfinance as an alternative to pandas_finance

雅虎在 2021 年年中做出更改后,希望使用 yfinance 作为 pandas_finance 的替代方案来提取股票信息(行业、部门、概况)。我有一个包含 ~50-100 个代码 (unchecked_tickers) 的列表,我希望通过它来循环获取行业、部门和概况。这是我当前的代码,对于 pandas_finance 来说相对较快,但对于 yfinance 来说需要几个小时:

sector = []

for i in range(len(unchecked_tickers)):
        try: 
            sec_data = yf.Ticker(unchecked_tickers[i]).info['sector']
            sector.append(sec_data)
        except:
            sector.append('0')

unchecked_earnings_df["Sector"] = sector

industry = []

for i in range(len(unchecked_tickers)):
        try: 
            ind_data = yf.Ticker(unchecked_tickers[i]).info['industry']
            industry.append(ind_data)
        except:
            industry.append('0')

unchecked_earnings_df["Industry"] = industry

desc = []

for i in range(len(unchecked_tickers)):
        try: 
            desc_data = yf.Ticker(unchecked_tickers[i]).info['longBusinessSummary']
            desc.append(desc_data)
        except:
            desc.append('0')

unchecked_earnings_df["Desc"] = desc

unchecked_earnings_df.head()

每个 yf.Ticker("Stock ticker") 函数调用都会向存储股票数据的服务器发送一个请求。如果您多次执行此请求,可能需要一段时间。在某些时候,获得响应所需的时间变得更长,这可能是由服务器引起的,因为服务器不希望您在这么短的时间内发送许多请求,但我不确定这是否是真正的原因。您甚至可以证明,当您测量每个 yf.Ticker() 函数调用前后的时间并打印差异时。要解决响应时间长的问题,您无能为力。但是您的代码中有很多可以改进的地方。主要问题是您有 3 个不同的 for 循环,它们都执行相同的迭代并且都在开始时执行相同的 yf.Ticker('stock ticker') 函数调用,这是花费最多时间的函数。为了提高性能,您可以在一个 for 循环中完成三个 for 循环中所做的所有事情,并且每次迭代只需调用一次 yf.Ticker() 函数。喜欢这个:

for i in range(len(unchecked_tickers)):
    try: 
        ticker = yf.Ticker(unchecked_tickers[i])
        sector.append(ticker.info['sector'])
        industry.append(ticker.info['industry'])
        #.....
    except:
        sector.append('0')
        industry.append('0')
        #.....

这样,您只需为每个股票代码调用一次 yf.Ticker() 函数,而不是调用三次,这将使您的程序快三倍。