You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup提取财务数据后转DataFrame失败,求处理方案

从无分隔连续文本提取财务数据并转换为DataFrame

pd.read_csv只适用于有明确分隔符的结构化文本,你的无分隔连续文本肯定用不了,得用正则表达式来匹配提取关键信息,下面是具体操作步骤:

1. 先明确文本的结构规律

先把你的str_data拿出来拆解,比如假设它的格式类似:

2023-2024营业收入123456.78净利润98765.43总资产567890.122022-2023营业收入111222.33净利润88877.66总资产444555.99

核心规律一般是:

  • 会计年度:XXXX-XXXX格式的字符串
  • 财务指标:固定关键词(比如营业收入、净利润、总资产等)
  • 数值:紧跟在指标后的数字(可能带小数点、千分位逗号)

2. 用正则表达式批量提取数据

根据上面的规律写正则匹配规则,把年度、指标、数值一一对应提取出来:

import re
import pandas as pd

# 替换成你实际的str_data内容
str_data = "2023-2024营业收入123456.78净利润98765.43总资产567890.122022-2023营业收入111222.33净利润88877.66总资产444555.99"

# 正则规则:先匹配年度,再匹配该年度下的所有指标+数值
pattern = re.compile(r'(\d{4}-\d{4})((?:营业收入|净利润|总资产)[\d,.]+)+')

# 提取所有年度对应的指标块
matches = pattern.findall(str_data)

# 整理成结构化数据
data_list = []
for year, metrics_block in matches:
    # 拆分单个年度下的每个指标和数值
    metric_pattern = re.compile(r'(营业收入|净利润|总资产)([\d,.]+)')
    metric_matches = metric_pattern.findall(metrics_block)
    row = {'会计年度': year}
    for metric, value in metric_matches:
        # 去掉数值里的千分位逗号,转成数值类型
        row[metric] = float(value.replace(',', ''))
    data_list.append(row)

# 转换为DataFrame
df = pd.DataFrame(data_list)
print(df)

3. 适配你的实际文本调整规则

如果你的str_data有特殊格式,只需修改正则部分:

  • 若指标有新增(比如“营业成本”“净资产收益率”),把(营业收入|净利润|总资产)改成(营业收入|净利润|总资产|营业成本|净资产收益率)
  • 若数值带负号,把([\d,.]+)改成([-+]?[\d,.]+)
  • 若数值带货币符号(比如₹),把([\d,.]+)改成(₹?[\d,.]+),处理时再去掉符号

4. 最终效果

运行代码后会得到结构化的DataFrame,示例输出:

会计年度营业收入净利润总资产
2023-2024123456.7898765.43567890.12
2022-2023111222.3388877.66444555.99

直接用这个DataFrame就能做后续财务计算了。

内容的提问来源于stack exchange,提问作者Abinash Tripathy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:10:08