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

如何编辑pandas.read_html生成的DataFrame并转换为指定格式列表?

解决pandas read_html结果转换为目标列表的问题

我明白你现在的困扰:用read_html()拿到的是DataFrame列表,要把它处理成特定格式的嵌套列表才能写入MS SQL表。咱们一步步拆解解决这个问题:

首先,先明确你的数据结构:read_html()返回的列表里只有一个目标DataFrame,所以第一步先把它单独提取出来。之后我们需要处理NaN值、修改Plan列的内容,还要添加行号,最后转换成你要的格式。

完整处理代码

import requests
import pandas as pd

r = requests.get('URL')
pd.set_option('max_rows',10000)

# 1. 从read_html返回的列表中取出目标DataFrame
df_list = pd.read_html(r.content)
df = df_list[0]  # 你的输出里只有一个DataFrame,所以取索引0的元素

# 2. 处理Plan列:把551替换成NP_551,保留not(selected)不变
df[2] = df[2].apply(lambda x: f'NP_{x}' if x == 551 else x)

# 3. 把所有NaN值转换成字符串'NaN'(和目标格式一致)
df = df.fillna('NaN')

# 4. 添加行号列,从1开始计数(对应目标列表的第一个元素)
df['row_num'] = range(1, len(df) + 1)

# 5. 调整列顺序,让行号放在第一个位置,然后是原来的四列
df = df[['row_num', 0, 1, 2, 3]]

# 6. 转换成目标格式的嵌套列表
result_list = df.values.tolist()

# 打印验证结果
print(result_list)

代码细节解释

  • 提取目标DataFrame:read_html()会返回网页中所有表格对应的DataFrame列表,你的场景里只有一个目标表格,所以用df_list[0]提取出来单独处理。
  • 修改Plan列:用apply()遍历Plan列(对应DataFrame的第2列),判断值为551时自动添加NP_前缀,其他值比如not(selected)保持原样。
  • 统一NaN显示:用fillna('NaN')把DataFrame里的所有缺失值转换成字符串形式的'NaN',和你要的目标列表格式完全匹配。
  • 添加行号:生成从1开始的连续序号,作为每个子列表的第一个元素,符合你给出的示例结构。
  • 调整列顺序:确保最终的列顺序是行号 → Number → Name → Plan → 空列,和目标列表的结构完全对齐。
  • 转换为嵌套列表:values.tolist()会把处理好的DataFrame直接转换成你需要的嵌套列表格式,拿到后就可以直接写入MS SQL表了。

运行这段代码后,你得到的result_list就完全符合预期格式了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:55:54