使用 python 库 FundamenalAnalysis 下载各种代码的关键比率

Downloading key ratios for various Tickers with python library FundamenalAnalysis

我尝试通过 FundamentalAnalysis 库从雅虎财经下载关键财务比率。对于单身人士来说很容易我有一个带有代码和名称的 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 多个代码的数据,所以我不想将它们全部手动输入到列表中。 也许这个问题已经在其他地方得到了回答,在那种情况下很抱歉,但我一直无法找到对我有帮助的线程。有什么想法吗?

您可以使用

获取符号
symbols = df['Ticker'].to_list()

然后你可以使用 for 循环而不使用 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() returns 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()