Python中如何让机器读懂财务报表?

如何用 python 分析财务三表?一般都是怎么分析呢?
Python中如何让机器读懂财务报表?

5 回复

先得找个审计师


要处理财务报表,核心是结构化数据提取关键指标计算。我通常用 pandaspdfplumbertabula-py 来搞定。

1. 提取表格数据 如果是PDF报表,先用 pdfplumber 提取表格:

import pdfplumber
import pandas as pd

def extract_financial_tables(pdf_path):
    tables = []
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            # 提取当前页所有表格
            page_tables = page.extract_tables()
            for table in page_tables:
                # 转换为DataFrame
                df = pd.DataFrame(table[1:], columns=table[0])
                tables.append(df)
    return tables

# 使用示例
financial_tables = extract_financial_tables("financial_report.pdf")

2. 解析关键财务指标 提取资产负债表和利润表后,计算关键指标:

def analyze_financials(balance_sheet, income_statement):
    # 计算流动比率
    current_assets = balance_sheet['流动资产'].astype(float).sum()
    current_liabilities = balance_sheet['流动负债'].astype(float).sum()
    current_ratio = current_assets / current_liabilities
    
    # 计算净利润率
    net_income = income_statement['净利润'].astype(float).iloc[-1]
    revenue = income_statement['营业收入'].astype(float).iloc[-1]
    net_margin = net_income / revenue
    
    return {
        'current_ratio': round(current_ratio, 2),
        'net_margin': round(net_margin, 3)
    }

3. 处理非结构化文本 对于报表中的文字描述,可以用正则表达式匹配关键信息:

import re

def extract_financial_notes(text):
    # 匹配金额模式
    amount_pattern = r'[¥$€]?\s*\d{1,3}(?:,\d{3})*(?:\.\d{2})?'
    amounts = re.findall(amount_pattern, text)
    
    # 匹配百分比
    percent_pattern = r'\d+\.?\d*%'
    percentages = re.findall(percent_pattern, text)
    
    return amounts, percentages

实际工作流建议:

  • 先用 camelot 处理扫描版PDF(如果 pdfplumber 效果不好)
  • 对提取的数据做清洗:处理合并单元格、单位转换
  • openpyxlxlsxwriter 输出结构化报表

关键是先确保数据提取准确,再建立指标计算逻辑。不同公司的报表格式差异很大,可能需要针对性地调整解析规则。

一句话总结:用合适的库提取数据,然后写规则计算指标。

得让楼上的给你说个流程

其实重要的不是机器读懂,不同的人看同一份报表可能都会有不同的理解,所以重要的是你的算法。
给一个我自己的思考思路吧,不如尝试一下用行业平均和行业领袖的报表数据当成数据集用机器学习来训练,感觉可以尝试分析一下。

能给个思路吗?


感谢大家。如果国内的话是不是要两种思路,一种是假设数据都是真的,然后分析;另种一种是检验会不会有造假?本福特法则?

回到顶部