使用 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)
我尝试通过 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)