我有一个股票符号列表,我需要从中提取金融数据。我写了一个函数来获取我需要的所有数据(见下文)。
我在35只股票上测试了它,我花了9分钟来运行。真实的的数据集有600多个股票符号,这将需要几个小时的运行。
你能检查我的代码,并建议如何使它运行在不到5分钟,请?
以下是我需要的每只股票的财务指标:
# Free Cash Flow
# EV/EBIDTA
# P/E Ratio
# YoY Growth for Profit Margins
# EV/ Revenue
以下是示例数据集:
| | 符号|
| - -|- -|
| 第0页|AAOI系统|
| 一个|AAPL语言|
| 2个|ACCD公司|
| 三个|ACEV汽车|
| 四个|阿塞弗|
代码如下:
(简短说明:尝试为每只股票获得上面列出的5个财务指标,如果有一些数据缺失,则只需分配np.NaN值)
array=df['Symbol']
fin_df=pd.DataFrame()
for item in array:
#part 1
symbol=yf.Ticker(item)
info_df=pd.DataFrame(pd.Series(symbol.info)).T
values=['symbol','freeCashflow','enterpriseToEbitda','enterpriseToRevenue']
for value in values:
if value not in list(info_df.columns):
info_df[value]=np.NaN
else:
pass
info_df=info_df[['symbol','freeCashflow','enterpriseToEbitda','enterpriseToRevenue']]
#part 2
info_2=symbol.financials.T
try:
info_df['YoY Profit Margins Growth']=round(info_2['Gross Profit'][0]/info_2['Gross Profit'][1],2)
except:
info_df['YoY Profit Margins Growth']=np.NaN
#part 3
#info_3=pd.DataFrame(pd.Series(si.get_quote_table(item))).T
info_3=pd.DataFrame()
try:
info_3['PE Ratio (TTM)']=pd.Series(si.get_quote_table(item)).T['PE Ratio (TTM)']
except:
info_3['PE Ratio (TTM)']=np.NaN
info_df['PERatio']=info_3['PE Ratio (TTM)']
fin_df=pd.concat([fin_df,info_df])
fin_df.reset_index(drop=True, inplace=True)
fin_df
是否有一种方法可以使该功能在时间方面更有效?
1条答案
按热度按时间rkkpypqq1#
我知道这个帖子很老了,但是我现在才发现它。去“yfinance”图书馆看看。那里有各种各样的东西!!
季度财务数据示例: