pandas读取HTML表格与JSON数据的完整指南
在使用Python进行数据分析时,经常需要从网页或配置文件中提取结构化内容。本文详细演示如何利用pandas库直接读取HTML网页表格与JSON文件数据,涵盖基础导入、数据清洗(去空值/类型转换)、统计分析方法,以及处理读取JSON时常见的“Trailing data”报错修复方案,助你快速完成数据获取与预处理工作。
pandas读取HTML与JSON数据实战指南
第1步:准备环境与初始化代码结构
目的:搭建基础运行环境,确保解析功能可用。
入口与动作:通过包管理器安装核心依赖,并在脚本头部引入命名空间。
pip install pandas
安装完成后,初始化全局引用,后续所有读写操作均以此对象展开:
import pandas as pd
第2步:读取并清洗HTML网页表格数据
目的:将网页中的结构化表格提取为DataFrame对象,便于后续计算。
入口与动作:使用pd.read_html()函数,支持传入本地文件路径或远程URL。
重要参数与结果:该函数会自动扫描DOM中的<table>节点,返回一个包含所有匹配表格的列表。若业务仅需首个表格,通过索引[0]获取即可。
tables = pd.read_html('http://example.com/table.html')
df_html = tables[0]
完成状态判断:成功提取后,控制台可预览结构。查看前几行确认列名与数据对齐:
print(df_html.head())
数据清洗与转换:原始网页常含无效占位符或缺失值,需清理并统一数据类型。例如删除含缺失值的行、移除多余列,并将带货币符号的价格列转为浮点数:
clean_df = df_html.dropna().drop(columns=['Unnamed: 0'])
clean_df['Price'] = clean_df['Price'].str.replace('$', '').astype(float)
统计分析:清洗完毕后,可直接调用内置聚合方法计算核心指标:
mean_price = clean_df['Price'].mean()
median_price = clean_df['Price'].median()
std_price = clean_df['Price'].std()
第3步:读取并重塑JSON结构化数据
目的:解析嵌套或扁平的JSON文件/流,转换为二维表格格式。
入口与动作:调用pd.read_json(),同样支持本地路径与URL。
df_json = pd.read_json('data.json')
数据维护操作:
- 缺失值处理:根据分析需求选择保留或删除。删除含空值行/列使用
df.dropna();将空值填充为固定值使用df.fillna(0)。 - 类型转换与透视:使用
.astype(int)强制转换列类型。若数据为长表格式,可通过df.pivot(index='key_col', columns='time_col', values='value_col')转为宽表。
分组排序与导出:利用groupby()与sum()/mean()进行维度聚合,sort_values()按目标列排序。分析完成后,可一键保存为通用格式:
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', index=False)
第4步:排查读取JSON时的Trailing data报错
问题现象:执行pd.read_json()时报错ValueError: Trailing data,通常是因为源文件末尾存在非标准JSON格式的额外逗号、括号或换行符。
解决方法A(推荐):修改源文件格式
打开JSON编辑器,检查文件尾部是否多出}前的逗号(如"city": "New York",})。删除末尾非法分隔符后重新保存,常规读取即可恢复正常。
解决方法B:调整解析参数
对于多行JSON(每行独立对象)或难以手动修正的大文件,可启用逐行解析模式。将lines=True传入,强制pandas按记录流读取:
df_fixed = pd.read_json('malformed.json', lines=True)
此方式会逐行构建DataFrame,有效规避格式截断问题。若需更精细控制,可迭代文件行并单独调用解析器:
with open('file.json') as f:
for line in f:
temp_df = pd.read_json(line.strip())
通过以上步骤,可稳定覆盖从网页抓取到本地文件解析的全流程。以上就是pandas读取HTML与JSON数据实战指南的详细内容,更多关于Python数据处理与自动化清洗的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









