使用Pandas.read_html()时如何避免将含<th>的行识别为表头?
解决方案
pd.read_html默认会自动识别<thead>标签内的内容作为列名,即使指定header=None也不会将<thead>内的内容视为普通数据行,可通过以下两种方法实现需求:
方法1:读取后手动拼接表头行
拿到读取结果后,将当前列名作为第一行插入数据,再重置列名即可:
import pandas as pd # read_html返回的是页面匹配到的所有表格组成的列表,取第一个表格 df = pd.read_html(html, header=None)[0] # 将当前列名转为普通数据行 header_row = pd.DataFrame([df.columns.to_list()], columns=df.columns) # 把表头行拼接到原表格的最顶部 df = pd.concat([header_row, df], ignore_index=True) # 重置列名为默认的0、1、2 df.columns = range(df.shape[1])
执行后输出结果如下(注:你给出的预期结果中第0行第2列的header 2属于笔误,实际应为header 3):
0 1 2 0 header 1 header 2 header 3 1 001 A 1 2 002 B 2 3 003 C 3
方法2:预处理HTML移除thead标签
可以先把HTML文本中的<thead>和</thead>标记删除,让pandas把所有<tr>行都识别为普通数据行:
import pandas as pd # 移除thead标签标记 processed_html = html.replace('<thead>', '').replace('</thead>', '') # 直接读取处理后的HTML即可 df = pd.read_html(processed_html, header=None)[0]
该方法无需后续调整表格结构,直接就能得到目标结果。
内容的提问来源于stack exchange,提问作者Horatio Caine
相关产品推荐
相关产品推荐

