python - 使用 yfinance 的 Assets 负债表没有像雅虎财经那样的 'Total Debt'

标签 python python-3.x pandas yfinance

我正在尝试使用 yfinance 访问公司的“总债务”行以计算实际利率,但在使用 .balancesheet、.balance_sheet 或 .get_balance_sheet 时它不会显示创建的股票代码对象。

例如,这是雅虎财经上“AAPL”的 Assets 负债表: enter image description here

但是如果我使用 yfinance,我就不会看到“总债务”:

import yfinance as yf
ticker_object = yf.Ticker('AAPL')
balancesheet = ticker_object.balancesheet
print(balancesheet)

看不到“总债务”行。 enter image description here

(我知道完整的表格没有被捕获,我的屏幕很小,但你可以相信我它不在那里)

我发现的另一个解决方法是,我可以只获取“短期长期债务”,然后从表中添加“长期债务”,但有两个问题:

  • 对于像 MSFT 这样的公司,如果您这样做,加起来就不会达到雅虎财经上显示的“总债务”。
  • 对于 SNOW 或 FB 等一些公司,使用 yfinance 时甚至不会出现“短期长期债务”和“长期债务”行。

因此,我认为能够从雅虎财经的表格中访问“总债务”行是解决此问题的最快方法。只是我无法使用 yfinance 找到它。

我还知道,在股票代码对象上使用 .info 时,字典中有一个“总债务”键,但这是最近的季度值,而不是我要查找的年度值。

最佳答案

我做了一个简单的函数来直接从finance.yahoo.com grep数据

import pandas as pd
import requests
from datetime import datetime
from bs4 import BeautifulSoup

def get_balance_sheet_from_yfinance_web(ticker):
    url = f"https://finance.yahoo.com/quote/GOOG/balance-sheet?p={ticker}"
    header = {'Connection': 'keep-alive',
                'Expires': '-1',
                'Upgrade-Insecure-Requests': '1',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) \
                AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'
                }
        
    r = requests.get(url, headers=header)
    html = r.text
    soup = BeautifulSoup(html, "html.parser")

    div = soup.find_all('div', attrs={'class': 'D(tbhg)'})
    if len(div) < 1:
        print("Fail to retrieve table column header")
        exit(0)

    col = []
    for h in div[0].find_all('span'):
        text = h.get_text()
        if text != "Breakdown":
            col.append( datetime.strptime(text, "%m/%d/%Y") )
    
    df = pd.DataFrame(columns=col)
    for div in soup.find_all('div', attrs={'data-test': 'fin-row'}):
        i = 0
        idx = ""
        val = []
        for h in div.find_all('span'):
            if i == 0:
                idx = h.get_text()
            else:
                num = int(h.get_text().replace(",", "")) * 1000
                val.append( num )
            i += 1
        row = pd.DataFrame([val], columns=col, index=[idx] )
        df = df.append(row)

    return df

这是输出

print( get_balance_sheet_from_yfinance_web("GOOG") )
                                           2021-12-31    2020-12-31    2019-12-31    2018-12-31
Total Assets                             359268000000  319616000000  275909000000  232792000000
Total Liabilities Net Minority Interest  107633000000   97072000000   74467000000   55164000000
Total Equity Gross Minority Interest     251635000000  222544000000  201442000000  177628000000
Total Capitalization                     264479000000  236476000000  205400000000  181578000000
Common Stock Equity                      251635000000  222544000000  201442000000  177628000000
Capital Lease Obligations                 15551000000   12840000000   12009000000      62000000
Net Tangible Assets                      227262000000  199924000000  178839000000  157520000000
Working Capital                          123889000000  117462000000  107357000000  101056000000
Invested Capital                         264479000000  236476000000  205400000000  181578000000
Tangible Book Value                      227262000000  199924000000  178839000000  157520000000
Total Debt                                28395000000   26772000000   15967000000    4012000000
Share Issued                                662121000     675222000     688335000     695556000
Ordinary Shares Number                      662121000     675222000     688335000     695556000

关于python - 使用 yfinance 的 Assets 负债表没有像雅虎财经那样的 'Total Debt',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70090315/

相关文章:

python - 我应该在 eq 函数中测试对象标识吗

python - 角度的加权平均值

python - 搜索查询仅适用于数据框的第一行

Python Kafka 客户端 - 没有错误但无法正常工作

python - 子集 pandas 数据框直到第一次满足条件时

python - 从 Pandas 的每一行创建一个新列

python - 如何进行这个 pandas 查询?

python - 如何从具有外键角度的模型中显示 Django admin 中的相关对象?

mysql - 通过 pymysql 执行查询不返回与在 MySQL 中运行相同的结果

python - 在 Keras 序列中的特定索引处连接两个不同维度的输入