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

Python Pandas:高效重构宽表数据为长表格式的实用指南

老浩酱_5682

老浩酱_5682

发布时间:2025-07-08 19:24:20

|

626人浏览过

|

来源于php中文网

原创

Python Pandas:高效重构宽表数据为长表格式的实用指南

本教程旨在详细阐述如何利用Pandas库高效地将具有重复列模式(如id_mXX和mprice成对出现)的宽格式Excel数据重构为更易于分析的长格式数据。文章将重点讲解pandas.lreshape函数的使用方法,包括动态列选择和处理Pandas自动重命名列的场景,旨在提供清晰、专业的教程,帮助用户解决复杂的数据重塑问题。

问题背景与挑战

在数据分析和处理中,我们经常会遇到一种特殊的宽表数据格式。这种格式的特点是存在多组具有相同逻辑意义但带有不同后缀的列,例如:id_m00和mprice构成一组,id_m01和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

对于这种数据重塑任务,Pandas库提供了多种函数,如melt。然而,当列名模式复杂且存在重复列名时,melt函数可能无法直接达到预期效果,可能导致额外的空值列或需要复杂的后处理。在这种情况下,pandas.lreshape函数提供了一个更为优雅和直接的解决方案。

pandas.lreshape:解决方案的核心

pandas.lreshape函数专为处理具有重复列组(或称“模式化列”)的宽表数据而设计。它允许你指定如何将这些重复的列组“堆叠”起来,形成新的长格式列。其核心在于通过一个映射字典来定义哪些原始列应该合并成新的目标列。

实现步骤与代码解析

首先,我们需要模拟从Excel读取数据并创建DataFrame。值得注意的是,当Pandas读取Excel文件时,如果存在同名的列(例如多个mprice列),它会自动为重复的列名添加数字后缀,如mprice.1、mprice.2等。这种自动重命名对于我们使用lreshape非常有利,因为它使得我们可以通过模式匹配来选择所有相关的列。

立即学习“Python免费学习笔记(深入)”;

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
import pandas as pd
import io

# 模拟从Excel读取的数据
# 假设Pandas在读取时将重复的'mprice'列自动重命名为'mprice', 'mprice.1'等
# 在实际应用中,您将使用 pd.read_excel("your_file.xlsx")
data = """Date,id_m00,mprice,id_m01,mprice.1
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
"""
# 使用io.StringIO模拟文件读取,并处理欧洲数值格式(逗号作小数分隔符)
# 注意:原始数据中12,05和09,55在csv中会被解析为两列,这里为了模拟,将逗号替换为点
# 实际Excel读取时,如果Pandas能正确识别区域设置,可能不需要手动替换
# 为了简化模拟,我们假设数据是12.05,8.80
data_corrected = """Date,id_m00,mprice,id_m01,mprice.1
01.01.2023,aa-bb-cc,12.05,dd-ee-fr,8.80
02.01.2023,aa-dd-ee,9.55,ff-gg-gg,7.50
"""
df = pd.read_csv(io.StringIO(data_corrected), sep=',')

# 将Date列转换为日期时间格式
df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y')

print("原始 DataFrame 结构:")
print(df)
print("\n")

# 使用lreshape重构数据
# mapping参数是一个字典,键是新的目标列名,值是包含原始列名的列表
# df.filter(like="...") 可以动态地选择所有匹配模式的列
out = pd.lreshape(
    df,
    {"id": df.filter(like="id_m").columns, # 匹配所有以"id_m"开头的列,合并为新的"id"列
     "mprice": df.filter(like="price").columns} # 匹配所有包含"price"的列(包括mprice, mprice.1等),合并为新的"mprice"列
)

print("重构后的 DataFrame:")
print(out)

代码解析:

  1. 数据读取与准备:

    • 我们使用pd.read_csv(io.StringIO(data_corrected), sep=',')来模拟从CSV(或Excel)文件读取数据。在实际应用中,您会直接使用pd.read_excel("your_file.xlsx")。
    • df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y') 将日期字符串转换为Pandas的日期时间对象,方便后续处理。
    • 关键点: 当Pandas读取Excel文件时,如果原始数据中有多个名为mprice的列,它会自动将它们重命名为mprice, mprice.1, mprice.2等。这个特性是lreshape能够高效工作的基础。
  2. pd.lreshape函数:

    • df: 这是我们要重塑的DataFrame。
    • mapping: 这是一个字典,定义了如何将宽格式的列映射到长格式的新列。
      • 键 ("id", "mprice") 是我们希望在输出DataFrame中拥有的新列的名称。
      • 值 (df.filter(like="id_m").columns, df.filter(like="price").columns) 是一个包含原始DataFrame中所有相关列名的列表。
        • df.filter(like="id_m").columns: 这是一个非常实用的Pandas功能,它会返回DataFrame中所有列名中包含“id_m”字符串的列。这确保了无论是id_m00、id_m01还是id_m46,都会被自动选中并归入新的id列。
        • df.filter(like="price").columns: 同理,这会选择所有列名中包含“price”字符串的列,包括原始的mprice以及Pandas自动重命名后的mprice.1、mprice.2等,并将它们合并到新的mprice列中。

注意事项

  1. 列名约定: lreshape的强大之处在于它能够处理具有系统性命名模式的列。确保您的原始数据列名具有可识别的模式(例如,所有ID列都以id_m开头,所有价格列都包含price)。
  2. Pandas自动重命名: 了解Pandas在读取具有重复列名的Excel文件时,会自动添加数字后缀(如mprice.1)的行为至关重要。这使得filter(like=...)方法能够优雅地捕获所有相关列。
  3. 数据类型: 在重塑数据后,请检查新生成的列(如mprice)的数据类型是否正确。如果原始数据中的数字是文本格式(例如,使用逗号作为小数分隔符),您可能需要在读取数据时使用decimal=','参数,或者在重塑后进行类型转换。
  4. 固定列: 对于像Date这样不需要重塑但需要保留的列,lreshape会自动将其作为固定列保留,并在重塑后的数据中重复显示。

总结

pandas.lreshape是处理具有重复列组的宽表数据并将其转换为长格式的强大工具。与melt相比,它在处理这种特定模式时提供了更直接和简洁的语法。通过灵活运用mapping参数和df.filter()等动态列选择方法,您可以高效地完成复杂的数据重塑任务,为后续的数据分析和可视化奠定坚实的基础。掌握lreshape将显著提升您在Python中处理复杂表格数据的能力。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

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

火山引擎

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

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

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

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

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

相关专题

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

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

340

2025.12.04

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

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

272

2026.01.31

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

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

751

2026.04.13

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

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

3251

2023.10.31

php数据类型
php数据类型

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

554

2025.10.31

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

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

542

2026.02.12

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1789

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1211

2024.06.27

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

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

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