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

如何使用pd.read_html抓取含百分比值的HTML表格并解决解析报错

解决方法

你遇到的报错是因为pd.read_html默认会自动推断页面表格列的数据类型,遇到带%的字符串时尝试转换为整数失败,你可以通过强制先将所有列读取为字符串规避类型推断报错,后续再自行处理百分比格式的数值即可。

你可以直接使用如下修改后的代码:

import requests
import pandas as pd

# 基金ID列表
fund_ids = ['LU0526609390:EUR', 'IE00BHBX0Z19:EUR', 'LU1076093779:EUR', 'LU1116896363:EUR']
result = []

for fund_id in fund_ids:
    url = f'https://markets.ft.com/data/funds/tearsheet/summary?s={fund_id}'
    r = requests.get(url).content
    # 强制所有列读取为字符串,避免类型推断报错
    df_profile = pd.read_html(r, dtype=str)[0]
    # 将两列的键值对表格转置为一行,对应单个基金的所有属性
    df_row = df_profile.set_index(0).T
    # 新增Fund_ID列关联对应基金
    df_row.insert(0, 'Fund_ID', fund_id)
    result.append(df_row)

# 合并所有基金数据
final_df = pd.concat(result, ignore_index=True)

# (可选)处理百分比列,将%字符串转为数值
def parse_percent(val):
    if isinstance(val, str) and val.endswith('%'):
        return float(val.strip('%')) / 100
    return val

final_df = final_df.applymap(parse_percent)

print(final_df)

代码说明

  • 调用pd.read_html时添加dtype=str参数,关闭自动类型推断,所有内容先以字符串格式读取,直接规避百分号转换报错
  • 目标页面的「Profile and investment」为两列键值对格式,需要转置后才能得到每个基金占一行、属性为列的目标格式
  • 可选的parse_percent函数可以将百分比字符串转换为小数格式的数值,如果你需要保留原%字符串格式,删除这部分处理逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:03