首页 > 解决方案 > 使用 python 库 FundamentalAnalysis 下载各种 Ticker 的关键比率

问题描述

我尝试通过 FundamentalAnalysis 库从 yahoo Finance 下载关键财务比率。单身很容易我有一个带有代码和名称的df:

  Ticker                      Company
0      A    Agilent Technologies Inc.
1     AA            ALCOA CORPORATION
2    AAC             AAC Holdings Inc
3    AAL  AMERICAN AIRLINES GROUP INC
4   AAME      Atlantic American Corp.

然后我尝试使用 for 循环通过 fa.ratios() 下载每个股票代码的比率。

for i in range (3):
    i = 0
    i = i + 1
    Ratios = fa.ratios(tickers["Ticker"][i])

所以基本上它会下载一个股票代码和第二个股票的所有比率,依此类推。我也尝试将 df 更改为列表,但效果不佳。如果我手动将它们放入列表中,例如:

Symbol = ["TSLA" , "AAPL" , "MSFT"]

它以某种方式工作。但由于我想使用来自 1000 多个股票代码的数据,我不想将所有这些数据手动输入到列表中。也许这个问题已经在其他地方得到了回答,在那种情况下很抱歉,但我无法找到对我有帮助的线程。有任何想法吗?

标签: pythonlistloopsdownloadfinance

解决方案


您可以使用获取符号

symbols = df['Ticker'].to_list()

然后你可以使用for-loop 没有range()

ratios = dict()

for s in symbols:
    ratios[s] = fa.ratios(s)

print(ratios)

因为有些符号可能不会给出比率,所以你应该使用try/except


最小的工作示例。我io.StringIO只用来模拟文件。

import FundamentalAnalysis as fa
import pandas as pd
import io

text='''Ticker                      Company
A    Agilent Technologies Inc.
AA            ALCOA CORPORATION
AAC             AAC Holdings Inc
AAL  AMERICAN AIRLINES GROUP INC
AAME      Atlantic American Corp.'''

df = pd.read_csv(io.StringIO(text), sep='\s{2,}')

symbols = df['Ticker'].to_list()
#symbols = ["TSLA" , "AAPL" , "MSFT"]
print(symbols)

ratios = dict()
for s in symbols:
    try:
        ratios[s] = fa.ratios(s)
    except Exception as ex:
        print(s, ex)

for s, ratio in ratios.items():
    print(s, ratio)

编辑:它似乎fa.ratios()返回DataFrames,如果你将它们保留在列表中,那么你可以将所有连接DataFrames到一个DataFrame

ratios = list()  # list instead of dictionary
for s in symbols:
    try:
        ratios.append(fa.ratios(s))  # append to list
    except Exception as ex:
        print(s, ex)

df = pd.concat(ratios, axis=1)  # convert list of DataFrames to one DataFrame

print(df.columns)
print(df)

文档:pandas.concat()


推荐阅读