跳轉至

建立 2026-09-16 更新 2026-09-16

財務報表與選股

技術指標告訴你「價格在做什麼」,財務報表告訴你「這家公司體質好不好」。這一頁介紹如何抓取上市公司的財務報表與財務比率,並示範一個最基本的財報選股邏輯:只挑 ROE 長期穩定的公司。

財報資料哪裡找

來源 內容
公開資訊觀測站(MOPS) 台灣上市櫃公司財報、公告的官方彙整站
政府資料開放平台 上市公司基本資料的公開資料集
券商財報頁面(如個股速覽頁) 部分券商會把資產負債表、損益表整理成單一 HTML 表格,方便用 pandas.read_html 直接讀取

券商網頁屬於第三方整理

範例中讀取的券商財報頁面(如個股速覽頁)是第三方整理後的資料,網頁結構可能隨時調整。正式使用前建議以公開資訊觀測站的原始財報為準做交叉核對。

讀取財務報表

網頁上的財報表格,可以直接用 pandas.read_html() 整批讀進來,不需要一格一格複製貼上:

import pandas as pd

url = "券商個股財報頁面網址"
dfs = pd.read_html(url, index_col=0)   # 一次讀出頁面中所有表格

df = dfs[2]                    # 依實際頁面結構挑出資產負債表
df.columns = df.loc["期別"]     # 把「期別」列設成欄位名稱
df.index.name = "科目"

df.loc["資產總額"]              # 取出單一會計科目、各期的數字

用財務比率做簡單選股

常見的財報選股邏輯,是設定一個財務比率的門檻,只留下長期符合條件的公司。以 ROE(股東權益報酬率) 為例:連續 5 年中,至少有 4 年 ROE 超過 15%,代表公司長期獲利能力穩定。

import numpy as np
import pandas as pd

def roe_strategy(stock_no):
    url = f"券商個股財務比率頁面網址?a={stock_no}"
    dfs = pd.read_html(url)
    df = dfs[2]

    years = df[df[0] == "期別"].iloc[0][1:].astype(int)
    roe = df[df[0] == "ROE(B)─常續利益"].iloc[0][1:].astype(float)

    # 近 5 年中,ROE > 15% 的年數是否達到 4 年
    qualified_years = sum(np.array(roe)[:5] > 15)
    return qualified_years >= 4

companies = pd.read_csv("https://dts.twse.com.tw/opendata/t187ap03_L.csv", encoding="utf8")

selected = [code for code in companies["公司代號"] if roe_strategy(code)]

這只是最簡單的單指標選股示範;實務上通常會同時檢查獲利能力(ROE、毛利率)、財務結構(負債比)與成長性(營收成長率)等多個面向,並留意個別公司財報結構的例外情況。

動手做

Notebook 內容
3-1 抓取財務報表 pandas.read_html 讀取個股資產負債表並繪製走勢
3-2 抓取財務比率 讀取 ROE 等財務比率資料
3-3 簡單財報選股 完整示範用 ROE 門檻篩選出全市場符合條件的公司