使用 Pandas 进行多格式数据整合:从 Excel、JSON 到 HTML 的处理实战

前言

在数据处理与分析的实际场景中,我们经常需要整合不同格式的数据,例如 Excel 表格、JSON 配置文件、HTML 报表等。本文以一个具体任务(蓝桥杯模拟练习题)为例,详细讲解如何使用 Python 的 Pandas 库结合其他工具,将三种不同格式的数据文件合并为统一的结构化输出,满足业务分析的需求。

题目地址:

1.数据处理 - 蓝桥云课

本文主要解释大佬的题解

一、任务背景与目标

1.任务描述

我们需要合并三个文件的数据:

  • 2022_january.xlsx(Excel 表格):存储 1 月的消费数据
  • 2022_february.json(JSON 文件):存储 2 月的消费数据
  • 2022_may.html(HTML 文件):存储 5 月的消费数据

2.目标输出

最终数据需整合成一个字典,结构如下:

{"january": {"1-1": {"food": 123, "clothes": 456, ...},  # 1月1日消费数据"1-2": {...}},"february": { ... },"may": { ... }
}

每个月份的每一天数据需包含固定的 6 个消费类别(food, clothes, vehicle, sports, loans, other),缺失类别默认值为 0。

二、数据处理全流程解析

一、任务核心目标

将 ExcelJSONHTML 三种格式的数据文件,按月份 - 日期 - 消费类别的层级结构合并为统一的字典,具体要求:

  1. 键名规范:月份用英文(january/february/may),日期格式为 M-d(如 1-5)。
  2. 消费类别:固定 6 个类别(foodclothesvehiclesportsloansother),缺失值默认 0。

二、分格式数据处理步骤

1. Excel 文件(2022_january.xlsx)处理

核心问题:从表格中提取日期和消费数据,转换为指定格式。
关键步骤

# 1. 读取文件并跳过无效行,指定索引列
data_1_xlsx = pd.read_excel('/home/project/2022_january.xlsx', skiprows=4, index_col=2)
# 2. 删除无关列(前两列可能为序号或说明,非数据列)
data_1_xlsx = data_1_xlsx.drop(data_1_xlsx.columns[[0, 1]], axis=1)
# 3. 日期格式处理:转换为 datetime 后格式化为 M-d(如 1-5,去掉前导零)
data_1_xlsx.index = pd.to_datetime(data_1_xlsx.index).strftime('%-m-%-d')
# 4. 转换为字典:{日期: {类别: 金额}}
data_1 = {'january': data_1_xlsx.to_dict('index')}

技术点

  • skiprows=4:跳过前 4 行无用数据(如标题、说明行),确保从有效数据行开始读取。
  • index_col=2:将第 3 列(索引 2)作为日期列(假设该列存储日期信息)。
  • strftime('%-m-%-d'):生成无 lead-zero 的日期(如 1-1 而非 01-01),严格匹配题目要求。
2. JSON 文件(2022_february.json)处理

核心问题:直接加载 JSON 数据,确保格式符合要求。
关键步骤

with open('/home/project/2022_february.json', 'r') as jsonf:data_2 = json.load(jsonf)

技术点

  • JSON 文件结构假设为 {日期: {类别: 金额}},与目标格式一致,可直接加载。
  • 若原始数据缺失类别(题目未提及),需补全;但根据正确代码,此处直接使用原始数据(可能已满足要求)。
3. HTML 文件(2022_may.html)处理

核心问题:解析 HTML 表格,提取日期和消费数据。
关键步骤

# 1. 解析HTML并提取所有表头文本
with open('/home/project/2022_may.html', 'r') as htmlf:data_5_html = htmlf.read()
data_5_html = BeautifulSoup(data_5_html, 'lxml')  # 使用高效解析器
headers = [body.text for body in data_5_html.find_all('th')]  # 提取所有表头# 2. 按7个字段一组处理数据(1个日期+6个消费类别)
data_5 = {"may": {}}
for i in range(7, len(headers), 7):  # 从第7个元素开始(跳过表头说明)date = headers[i]  # 日期字段(第i个元素)values = headers[i:i+7]  # 7个字段:日期+6个类别(实际用后6个)day_data = {headers[j]: int(values[j]) for j in range(i+1, i+7)}  # 提取后6个类别data_5['may'][date] = day_data

技术点

  • 表格结构分析:假设 HTML 表格的表头和数据行按固定格式排列,每个日期对应 7 个字段(日期 + 6 个类别)。
  • 索引计算:通过 range(7, len(headers), 7) 分组,每组第一个元素为日期,后续 6 个为消费金额。
  • 类型转换:金额转换为整数(int(values[j])),与题目示例输出一致。

三、数据合并与格式校验

1. 合并三部分数据
data = {**data_1, **data_2, **data_5}

原理:使用字典解包(**)将三个月份的数据合并,键名(january/february/may)自动拼接,避免重复。

2. 格式校验关键点
  • 日期格式:所有日期键必须为 M-d 形式(如 1-1),通过 strftime 或直接提取确保一致性。
  • 消费类别:确保每个日期的字典包含全部 6 个类别(题目示例中other默认 0,但原始数据可能已包含,无需额外补全)。
  • 绝对路径:使用题目规定的绝对路径(如 /home/project/...),避免文件读取错误。

四、完整代码逻辑总结

  1. Excel 处理: 跳过无效行,选择正确索引列,格式化日期,转换为字典。
  2. JSON 处理:直接加载,假设数据结构已符合要求(键为日期,值为类别金额)。
  3. HTML 处理:解析表格,按固定字段分组提取日期和消费数据,转换为整数。
  4. 合并:通过字典解包合并三部分数据,确保键名和格式完全符合目标结构。

五、易错点与解决方案

  1. 文件路径错误:必须使用绝对路径(题目明确要求),避免因工作目录变化导致的 FileNotFoundError
  2. 日期格式不匹配:使用 pd.to_datetime 和 strftime 严格控制日期格式,确保无前导零(如 %-m)。
  3. 表格结构解析错误:通过打印 headers 或数据行调试,确认 HTML 表格的字段顺序和分组逻辑(如每组 7 个字段)。
  4. 数据类型不一致:消费金额统一为整数(与示例一致),使用 int() 转换,避免浮点型误差。

六、总结

本题核心是多格式数据的解析与结构化转换,需针对每种格式的特点选择合适的库(pandas 处理表格,json 处理键值对,BeautifulSoup 处理 HTML 表格),并严格按照题目要求的层级结构组织数据。关键在于格式细节的精确匹配(日期、类别名称、数据类型),以及通过调试确保每一步解析后的数据结构符合预期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今日行情明日机会——20250425

指数依然在震荡,等待方向选择,整体量能不搞但个股红多绿少。 2025年4月25日涨停板行业方向分析如下: 一、核心行业方向及驱动逻辑 一季报增长(17家涨停) 核心个股:惠而浦、鸿博股份、卫星化学驱动逻辑&am…

Python 快速获取Excel工作表名称

文章目录 前言准备工作Python 获取Excel中所有工作表的名称Python 获取Excel中隐藏工作表的名称 前言 在数据分析与办公自动化领域,通过Python处理Excel文件已成为必备技能。通过获取工作表名称,我们可以: 快速了解文件结构自动化处理多工作…

宁德时代25年时代长安动力电池社招入职测评SHL题库Verify测评语言理解数字推理真题

测试分为语言和数字两部分,测试时间各为17分钟,测试正式开始后不能中断或暂停

ECMAScript 1(ES1):JavaScript 的开端

1. 版本背景与发布 ●发布时间:1997 年 6 月,由 ECMA International 正式发布,标准编号为 ECMA-262。 ●历史意义:ES1 是 JavaScript 的首个标准化版本,结束了 Netscape Navigator 与 Internet Explorer 浏览器间脚本语…

C语言面试高频题——define 和typedef 的区别?

1. 基本概念 (1) #define 定义:#define 是预处理指令,用于定义宏。作用:在编译之前进行文本替换。语法:#define 宏名 替换内容示例:#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定义:…

【自然语言处理与大模型】模型压缩技术之蒸馏

知识蒸馏是一种模型压缩技术,主要用于将大型模型(教师模型)的知识转移到更小的模型(学生模型)中。在大语言模型领域,这一技术特别重要。 知识蒸馏的核心思想是利用教师模型的输出作为软标签(sof…

PHP CURL发送POST请求(支持HEADER参数配置)

/** POST请求(raw数据请求,支持HEADER参数配置) * @param $url * @param $datas 支持数组或字符串 * # $CURLOPT_HTTPHEADER = [ X-AjaxPro-Method:ShowList, Content-Type: application/json; charset=utf-8, Content-Length: . strlen($data_string)]; …

利用JMeter代理服务器方式实现高效压测

前言 在当今快节奏的互联网时代,确保Web应用和服务能够在高负载下稳定运行变得至关重要。无论是电子商务平台、社交媒体网络还是在线教育服务,用户对网站响应速度和稳定性的期望从未如此之高。因此,性能测试不再是一个可选项,而是…

【JavaWeb后端开发04】java操作数据库(JDBC + Mybatis+ yml格式)详解

文章目录 1. 前言2. JDBC2.1 介绍2.2 入门程序2.2.1 DataGrip2.2.2 在IDEA执行sql语句 2.3 查询数据案例2.3.1 需求2.3.2 准备工作2.3.3 AI代码实现2.3.4 代码剖析2.3.4.1 ResultSet2.3.4.2 预编译SQL2.3.4.2.1 SQL注入2.3.4.2.2 SQL注入解决2.3.4.2.3 性能更高 2.4 增删改数据…

力扣-240.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, in…

Spark-Streaming(三)

一. kafka和flume的整合 任务需求一:利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台 1. 在flume/conf/目录下添加flume-kafka.conf文件 配置文件如下 2. 启动flume和kafka消费者 3. 传入数据 查看fl…

Spring Boot 启动生命周期详解

Spring Boot 启动生命周期详解 1. 启动阶段划分 Spring Boot 启动过程分为 4个核心阶段&#xff0c;每个阶段涉及不同的核心类和执行逻辑&#xff1a; 阶段 1&#xff1a;预初始化&#xff08;Pre-initialization&#xff09; 目标&#xff1a;准备启动器和环境配置关键类&am…

《深入理解 AOP》

一、AOP 是什么 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;是软件开发中一种重要的编程范式。它通过横向抽取机制&#xff0c;将那些与业务逻辑本身无关、却为业务模块所共同调用的逻辑或责任&#xff08;如事务处理、日…

Python【协程(Coroutine)和线程的关系】

协程(Coroutine)和线程都是实现并发编程的技术&#xff0c;但它们在实现方式、使用场景和性能上有显著区别。理解它们的关系与差异有助于在实际应用中选择合适的并发模型&#xff0c;以下是它们的核心关系与对比分析&#xff1a; 一、核心关系 互补关系 协程和线程可以结合使用…

Springboot——Redis的使用

在当今的软件开发领域&#xff0c;缓存技术是提升应用性能的关键手段之一。Redis 作为一款高性能的键值对存储数据库&#xff0c;凭借其出色的读写速度和丰富的数据结构&#xff0c;在缓存场景中得到了广泛应用。Spring Boot 作为一款简化 Spring 应用开发的框架&#xff0c;与…

BEVPoolv2:A Cutting-edge Implementation of BEVDet Toward Deployment

背景 该论文是在BEVDet的基础上进行了一个调整优化&#xff0c;传统的方法是将特征图与深度预测进行外积得到视椎特征图&#xff0c;再将它与预处理好的体素索引结合&#xff0c;将每个视椎特征分类到每个voxel中进行累加和的操作。BEVFusion与BEVDepth等方法是避免了累加和&a…

蓝桥杯常考的找规律题

目录 灵感来源&#xff1a; B站视频链接&#xff1a; 找规律题具有什么样的特点&#xff1a; 报数游戏&#xff08;Java组&#xff09;&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路详解&#xff1a; 代码详解&#xff1a; 阶乘求和&#xff08;Java组…

使用ffmpeg 将图片合成为视频,填充模糊背景,并添加两段音乐

1.输入3张图片,每张播放一次,播放两秒,视频分辨率设置为1920:1080,每张图片前0.3秒淡入,后0.3秒淡出,图片宽高比不变,用白色填充空白区域 ffmpeg -loop 1 -t 2 -i "img1.jpg" \-loop 1 -t 2 -i "img2.jpg" \-loop 1 -t 2 -i "img3.jpg" \-filte…

PostgreSQL技术内幕29:事件触发器tag原理解析

文章目录 0.简介1.概念说明2.tag的生成和存储2.1 tag合法性校验2.2 内存中存储2.3 持久化存储 3.tag的触发 0.简介 在上一篇文章中中&#xff0c;我们介绍了PG中的两种触发器&#xff0c;即适合于DML的普通触发器和对于DDL的事件触发器&#xff0c;其中事件触发器与常规的 DML…

mysql 导入很慢,如何解决

精选 原创 码出财富2025-04-14 17:35:14博主文章分类&#xff1a;数据库©著作权 文章标签mysql数据库用户名文章分类MySQL数据库yyds干货盘点阅读数184 导入大型 SQL 文件到 MySQL 数据库时&#xff0c;速度可能会受到影响。以下是一些优化方法和建议&#xff0c;帮助你…