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

news2025/7/16 9:04:23

前言

在数据处理与分析的实际场景中,我们经常需要整合不同格式的数据,例如 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.coloradmin.cn/o/2343446.html

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

相关文章

VuePress 使用教程:从入门到精通

VuePress 使用教程:从入门到精通 VuePress 是一个以 Vue 驱动的静态网站生成器,它为技术文档和技术博客的编写提供了优雅而高效的解决方案。无论你是个人开发者、团队负责人还是开源项目维护者,VuePress 都能帮助你轻松地创建和管理你的文档…

卷积神经网络--手写数字识别

本文我们通过搭建卷积神经网络模型,实现手写数字识别。 pytorch中提供了手写数字的数据集 ,我们可以直接从pytorch中下载 MNIST中包含70000张手写数字图像:60000张用于训练,10000张用于测试 图像是灰度的,28x28像素 …

SQL Server 2019 安装与配置详细教程

一、写在最前的心里话 和 MySQL 对比,SQL Server 的安装和使用确实要处理很多细节: 需要选择配置项很多有“定义实例”的概念,同一机器可以运行多个数据库服务设置身份验证方式时,需要同时配置 Windows 和 SQL 登录要想 Spring …

MyBatisPlus文档

一、MyBatis框架回顾 使用springboot整合Mybatis,实现Mybatis框架的搭建 1、创建示例项目 (1)、创建工程 新建工程 创建空工程 创建模块 创建springboot模块 选择SpringBoot版本 (2)、引入依赖 <dependencies><dependency><groupId>org.springframework.…

Memcached 主主复制架构搭建与 Keepalived 高可用实现

实验目的 掌握基于 repcached 的 Memcached 主主复制配置 实现通过 Keepalived 的 VIP 高可用机制 验证数据双向同步及故障自动切换能力 实验环境 角色IP 地址主机名虚拟 IP (VIP)主节点10.1.1.78server-a10.1.1.80备节点10.1.1.79server-b10.1.1.80 操作系统: CentOS 7 软…

鸿蒙ArkUI之相对布局容器(RelativeContainer)实战之狼人杀布局,详细介绍相对布局容器的用法,附上代码,以及效果图

在鸿蒙应用开发中&#xff0c;若是遇到布局相对复杂的场景&#xff0c;往往需要嵌套许多层组件&#xff0c;去还原UI图的效果&#xff0c;若是能够掌握相对布局容器的使用&#xff0c;对于复杂的布局场景&#xff0c;可直接减少组件嵌套&#xff0c;且随心所欲完成复杂场景的布…

线程函数库

pthread_create函数 pthread_create 是 POSIX 线程库&#xff08;pthread&#xff09;中的一个函数&#xff0c;用于创建一个新的线程。 头文件 #include <pthread.h> 函数原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*s…

[C]基础13.深入理解指针(5)

博客主页&#xff1a;向不悔本篇专栏&#xff1a;[C]您的支持&#xff0c;是我的创作动力。 文章目录 0、总结1、sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof和strlen的对比 2、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1 代码12.2.2 代码22.2.3 代码32.2.4 …

OpenCV 图形API(60)颜色空间转换-----将图像从 YUV 色彩空间转换为 RGB 色彩空间函数YUV2RGB()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从 YUV 色彩空间转换为 RGB。 该函数将输入图像从 YUV 色彩空间转换为 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图像必须是 8…

hbuilderx云打包生成的ipa文件如何上架

使用hbuilderx打包&#xff0c;会遇到一个问题。开发的ios应用&#xff0c;需要上架到app store&#xff0c;因此&#xff0c;就需要APP store的签名证书&#xff0c;并且还需要一个像xcode那样的工具来上架app store。 我们这篇文章说明下&#xff0c;如何在windows电脑&…

Golang | 位运算

位运算比常规运算快&#xff0c;常用于搜索引擎的筛选功能。例如&#xff0c;数字除以二等价于向右移位&#xff0c;位移运算比除法快。

产品动态|千眼狼sCMOS科学相机捕获单分子荧光信号

单分子荧光成像技术&#xff0c;作为生物分子动态研究的关键工具&#xff0c;对捕捉微弱信号要求严苛。传统EMCCD相机因成本高昂&#xff0c;动态范围有限&#xff0c;满阱容量低等问题&#xff0c;制约单分子研究成果产出效率。 千眼狼精准把握科研需求与趋势&#xff0c;自研…

Hot100方法及易错点总结2

本文旨在记录做hot100时遇到的问题及易错点 五、234.回文链表141.环形链表 六、142. 环形链表II21.合并两个有序链表2.两数相加19.删除链表的倒数第n个节点 七、24.两两交换链表中的节点25.K个一组翻转链表(坑点很多&#xff0c;必须多做几遍)138.随机链表的复制148.排序链表 N…

网络:手写HTTP

目录 一、HTTP是应用层协议 二、HTTP服务器 三、HTTP服务 认识请求中的uri HTTP支持默认首页 响应 功能完善 套接字复用 一、HTTP是应用层协议 HTTP下层是TCP协议&#xff0c;站在TCP的角度看&#xff0c;要提供的服务是HTTP服务。 这是在原来实现网络版计算器时&am…

【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析

基于YOLOv5的人脸检测与关键点定位系统深度解析 1. 技术背景与项目意义传统方案的局限性YOLOv5多任务方案的优势 2. 核心算法原理网络架构改进关键点回归分支损失函数设计 3. 实战指南&#xff1a;从环境搭建到模型应用环境配置数据准备数据格式要求数据目录结构 模型训练配置文…

【python】如何将python程序封装为cpython的库

python程序在发布时&#xff0c;往往会打包为cpython的库&#xff0c;并且根据应用服务器的不同架构&#xff08;x86/aarch64&#xff09;&#xff0c;以及python的不同版本&#xff0c;封装的输出类型也是非常多。本文介绍不同架构指定python下的代码打包方式&#xff1a; 首…

计算机组成原理 课后练习

例一&#xff1a; 例二&#xff1a; 1. 原码一位乘 基本原理 原码是一种直接表示数值符号和大小的方式&#xff1a;最高位为符号位&#xff08;0表示正&#xff0c;1表示负&#xff09;&#xff0c;其余位表示数值的绝对值。原码一位乘的核心思想是逐位相乘&#xff0c;并通…

SVN仓库突然没有权限访问

如果svn仓库突然出现无法访问的情况&#xff0c;提示没有权限&#xff0c;所有账号都是如此&#xff0c;新创建的账号也不行。 并且会突然提示要输入账号密码。 出现这个情况时&#xff0c;大概率库里面的文件有http或者https的字样&#xff0c;因为单独给该文件添加权限导致…

【Qt】文件

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; Qt 文件概述 二&#xff1a;&#x1f525; 输入输出设备类 三&#xff1a;&#x1f525; 文件读写类 四&#xff1a;&#x1f525; 文件和目录信息类 五&…

【AI】[特殊字符]生产规模的向量数据库 Pinecone 使用指南

一、Pinecone 的介绍 Pinecone是一个完全托管的向量数据库服务&#xff0c;专为大规模机器学习应用设计。它允许开发者轻松存储、搜索和管理高维向量数据&#xff0c;为推荐系统、语义搜索、异常检测等应用提供强大的基础设施支持。 1.1 Pinecone的核心特性 1. 高性能向量搜…