讲师中心 微信公众号
AI工具推荐 视频效率加速

使用Pandas高效重构Excel宽表数据

轻晨吖_4316

轻晨吖_4316

发布时间:2025-07-08 19:02:02

|

257人浏览过

|

来源于php中文网

原创

使用pandas高效重构excel宽表数据

本文详细介绍了如何利用Pandas库中的pd.lreshape函数,将具有重复模式列(如id_mXX和mprice对)的宽格式Excel表格数据,高效转换为更易于分析的长格式。教程涵盖了数据加载、lreshape参数配置及代码示例,旨在提供一种专业且简洁的数据重构方案,避免传统melt函数可能带来的复杂性和空值问题。

1. 数据重构需求概述

在数据分析工作中,我们经常会遇到以“宽”格式存储的数据,其中包含大量重复模式的列组。例如,一个Excel表格可能包含多对id和mprice列,如id_m00、mprice、id_m01、mprice,依此类推。这种结构虽然在某些情况下便于数据录入,但在进行数据分析或构建模型时,通常需要将其转换为“长”格式,即每行代表一个独立的观测值,且相关的id和mprice数据分别位于单独的列中。

原始数据示例:

Date id_m00 mprice id_m01 mprice
01.01.2023 aa-bb-cc 12,05 dd-ee-fr 8,80
02.01.2023 aa-dd-ee 09,55 ff-gg-gg 7,50

目标数据结构:

Date id mprice
01.01.2023 aa-bb-cc 12,05
02.01.2023 aa-dd-ee 09,55
01.01.2023 dd-ee-fr 8,80
02.01.2023 ff-gg-gg 7,50

对于这种特定的重构需求,传统的pd.melt函数可能不够直接,容易产生额外的中间列或大量的空值,需要后续进行复杂的清理。而pd.lreshape函数则为此类场景提供了更为优雅和高效的解决方案。

jQuery+CSS3 3D立体图片排列布局代码
jQuery+CSS3 3D立体图片排列布局代码

jQuery+CSS3 3D立体图片排列布局代码

下载

2. 使用 pd.lreshape 进行数据重构

pd.lreshape函数专门用于处理具有固定模式列组的宽表数据。它的核心思想是指定一组“stubnames”(存根名称)以及这些存根名称对应的所有列,然后将它们堆叠起来。

2.1 核心概念

pd.lreshape的语法如下: pandas.lreshape(data, column_groups, dropna=False)

  • data: 要进行重塑的DataFrame。
  • column_groups: 一个字典,键是新的列名(即重塑后的列名),值是一个列表,包含原始DataFrame中属于该新列名的所有列名。这些列表中的列名必须按照它们在原始DataFrame中的逻辑顺序排列,以确保正确配对。

2.2 实现步骤与代码示例

假设我们已经将Excel数据加载到一个名为df的Pandas DataFrame中。

import pandas as pd

# 模拟加载原始Excel数据
# 在实际应用中,您会使用 pd.read_excel("您的文件路径.xlsx")
data = {
    'Date': ['01.01.2023', '02.01.2023'],
    'id_m00': ['aa-bb-cc', 'aa-dd-ee'],
    'mprice': ['12,05', '09,55'],
    'id_m01': ['dd-ee-fr', 'ff-gg-gg'],
    'mprice.1': ['8,80', '7,50'] # 注意:Pandas在加载重复列名时会自动添加后缀,如 mprice.1
}
df = pd.DataFrame(data)

print("原始DataFrame:")
print(df)
print("-" * 30)

# 定义要重塑的列组
# 使用 df.filter(like="...") 可以方便地选择所有匹配模式的列
# 对于 'id' 列组,我们选择所有包含 'id_m' 的列
id_columns = df.filter(like="id_m").columns.tolist()
# 对于 'mprice' 列组,我们选择所有包含 'price' 的列
# 注意这里我们使用了 'price' 而不是 'mprice',因为加载后可能有 'mprice.1' 等
mprice_columns = df.filter(like="price").columns.tolist()

# 使用 lreshape 进行重塑
# column_groups 字典的键是重塑后的列名,值是原始DataFrame中对应的列名列表
out = pd.lreshape(
    df,
    {"id": id_columns, "mprice": mprice_columns}
)

# 格式化 mprice 列,将逗号替换为小数点并转换为数值类型
out['mprice'] = out['mprice'].str.replace(',', '.').astype(float)

print("\n重塑后的DataFrame:")
print(out)

代码解释:

  1. 数据加载模拟: pd.DataFrame(data) 模拟了从Excel文件加载数据后的DataFrame结构。特别注意,当Excel中存在同名列(如多个mprice)时,Pandas在加载时会自动为后续的同名列添加.1, .2等后缀,例如mprice.1。这是lreshape能够正确识别并配对的关键。
  2. 识别列组:
    • df.filter(like="id_m").columns.tolist() 会返回所有列名中包含“id_m”的列,例如['id_m00', 'id_m01']。
    • df.filter(like="price").columns.tolist() 会返回所有列名中包含“price”的列,例如['mprice', 'mprice.1']。 这些列表将作为lreshape中column_groups字典的值。
  3. 执行 lreshape:
    • {"id": id_columns, "mprice": mprice_columns} 定义了重塑的规则。它告诉lreshape,将id_columns列表中的所有列(按顺序)合并到新的id列下,同时将mprice_columns列表中的所有列(按顺序)合并到新的mprice列下。由于列名列表是按原始顺序提供的,lreshape能够智能地将id_m00与第一个mprice配对,id_m01与mprice.1配对,以此类推。
  4. 数据类型转换: 原始数据中的mprice可能包含逗号作为小数分隔符,并且是字符串类型。out['mprice'].str.replace(',', '.').astype(float) 将其转换为标准的浮点数类型,以便后续的数值计算。

3. 注意事项与总结

  • 列名规范性: pd.lreshape非常依赖于原始列名的模式。确保您的宽表数据中的列名遵循可识别的模式(例如,id_mXX和mprice)。
  • Pandas加载Excel的列名处理: 当Excel文件中存在重复的列名时,pd.read_excel会自动为后续的重复列名添加数字后缀(如mprice, mprice.1, mprice.2)。lreshape正是利用了这种机制来正确匹配对应的列。因此,在构建column_groups时,使用df.filter(like="...")这种模式匹配的方式来获取所有相关列,比手动列出所有列名更为健壮和方便。
  • 与 melt 的区别: 尽管melt也能用于宽到长的转换,但对于这种具有固定配对模式的列(如id和value总是成对出现),lreshape提供了更直接、更少中间步骤的解决方案,避免了melt可能产生的额外variable列和需要后续透视才能恢复原始配对的复杂性。
  • 性能: 对于大型数据集,lreshape通常表现出良好的性能,因为它针对这种特定类型的重塑进行了优化。

通过掌握pd.lreshape,数据分析师和工程师可以高效地处理复杂的宽表数据重构任务,将数据转换为更利于分析和建模的“长”格式,从而提升数据处理的效率和准确性。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

340

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

711

2026.04.13

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3211

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

554

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

542

2026.02.12

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

7067

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

824

2025.10.23

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Anaconda与Miniconda选择说明
Anaconda与Miniconda选择说明

共0课时 | 0人学习

CentOS 官方文档
CentOS 官方文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn