如何清理pd.read_html返回的非嵌套表格列表并转为可读DataFrame?
无需重新解析网站,用Pandas即可快速清理表格
1. 提取初始表格
首先读取网页表格并获取目标DataFrame:
import pandas as pd url = "http://pitzavod.ru/products/upakovka/" dfs = pd.read_html(url) df = dfs[0]
2. 修复表头与清理冗余行
原表格的表头分为两行(索引0和1),合并表头并移除冗余行即可解决结构混乱问题:
# 合并列名,补充子表头信息 df.columns = [ df.iloc[0, 0], f"{df.iloc[0, 1]} ({df.iloc[1, 0]})", df.iloc[0, 2] ] # 删除前两行冗余的表头行,重置索引 df_cleaned = df.drop([0, 1]).reset_index(drop=True)
3. 最终效果
清理后的DataFrame结构清晰,可读性大幅提升:
| Показатели | Марка целлюлозы (ОСН) | Методы испытаний |
|---|---|---|
| Механическая прочность при размоле в мельнице ... | 10 000 740 520 | ГОСТ13525.1 ГОСТ 13525.3 ГОСТ 13525.8 |
| Степень делигнификации, п.е. | 28 - 45 | ГОСТ 10070 |
| Сорность - число соринок в условной массе 500г... | 6500 | ГОСТ 14363.3 |
| Влажность, % не более | 20 | ГОСТ 16932 |
可选优化:拆分多值列
如果需要将Марка целлюлозы (ОСН)列中的多个数值拆分,可以添加以下代码:
# 拆分多值为列表,或展开为独立列 df_cleaned["Марка целлюлозы (ОСН)"] = df_cleaned["Марка целлюлозы (ОСН)"].str.split() # 可选:展开为多列 df_cleaned = df_cleaned.join( df_cleaned["Марка целлюлозы (ОСН)"].apply(pd.Series).rename(columns=lambda x: f"Значение_{x+1}") )
内容的提问来源于stack exchange,提问作者Levdar Armenia
相关产品推荐
相关产品推荐

