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

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.2023aa-bb-cc12,05dd-ee-fr8,8002.01.2023aa-dd-ee09,55ff-gg-gg7,50

这种结构在数据录入时可能很方便,但在进行聚合分析或绘制图表时却非常不便。我们通常希望将其转换为更标准化的“长格式”数据,即每行代表一个独立的观测值,所有相同类型的数据都归入一列。期望的目标格式如下:

Date id mprice

01.01.2023aa-bb-cc12,0502.01.2023aa-dd-ee09,5501.01.2023dd-ee-fr8,8002.01.2023ff-gg-gg7,50

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

pandas.lreshape:解决方案的核心

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

实现步骤与代码解析

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

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

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

代码解析:

数据读取与准备:

我们使用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能够高效工作的基础。

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列中。

注意事项

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

总结

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

以上就是Python Pandas:高效重构宽表数据为长表格式的实用指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1363106.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
利用Python Pandas高效重塑复杂Excel表格数据
上一篇 2025年12月14日 03:13:10
Python Pandas:高效重塑Excel宽表数据为规范长表格式
下一篇 2025年12月14日 03:13:20

相关推荐

  • LINUX怎么查看实时网速_LINUX实时网络带宽监控方法

    使用iftop可查看网卡实时流量,支持按连接排序,需sudo权限;2. nethogs按进程显示带宽占用,便于定位高消耗程序;3. sar -n DEV 1提供每秒刷新的接口流量统计,含接收与发送速率;4. bmon以文本图形界面展示速率趋势和网络负载。根据需求选择工具:连接监控用iftop,进程排…

    2026年9月27日
    000
  • AI绘画工具生成的图片可以商用吗?2025解析

    AI绘画图片能否商用取决于工具版权政策和使用方式。首先需查看所用AI工具的服务条款:若明确赋予用户商业使用权,则可放心商用;若限制商用或版权归开发者,则存在法律风险。为规避风险,应选择版权政策宽松的工具,对生成图片进行二次创作以增强独创性,并保留生成记录作为证据。用于品牌Logo时更需谨慎,因AI生…

    2026年9月27日
    200
  • 微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站

    微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站微软为PowerToys 键盘管理器开发新功能:可快捷启动应用 / 网站

    据国外科技媒体 deskmodder 的报道,微软正着手为“键盘管理器”(keyboard manager)工具添加全新功能。“键盘管理器”隶属于 powertoys 工具集,允许用户自定义全局及各应用程序内的键盘快捷键。微软计划扩展其功能,使用户能够通过自定义快捷键来启动程序,并设定程序启动时的状…

    2026年9月27日 • 用户投稿
    100
  • DeepSeek如何实现代码版本管理 DeepSeek与Git集成开发环境配置教程

    DeepSeek如何实现代码版本管理 DeepSeek与Git集成开发环境配置教程DeepSeek如何实现代码版本管理 DeepSeek与Git集成开发环境配置教程DeepSeek如何实现代码版本管理 DeepSeek与Git集成开发环境配置教程DeepSeek如何实现代码版本管理 DeepSeek与Git集成开发环境配置教程

    deepseek本身不实现版本管理,而是通过深度集成git来提供更智能高效的开发体验。其核心在于充分利用git功能,并通过可视化界面和增强工具提升使用效率。配置过程包括安装git、配置用户信息、安装deepseek、连接仓库、设置git参数及使用git功能。冲突解决依赖可视化标记与三方合并工具,按查…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么将文本进行URL编码_sublime文本URL编码技巧

    sublime怎么将文本进行URL编码_sublime文本URL编码技巧sublime怎么将文本进行URL编码_sublime文本URL编码技巧sublime怎么将文本进行URL编码_sublime文本URL编码技巧sublime怎么将文本进行URL编码_sublime文本URL编码技巧

    安装URL Encoding插件是Sublime Text实现URL编码最便捷的方式,通过命令面板安装后可一键完成编码与解码;也可手动调用Python脚本或配置外部构建系统结合快捷键实现,推荐插件方案以高效处理特殊字符。 在 Sublime Text 中没有内置的 URL 编码功能,但可以通过插件或…

    2026年9月27日 • 用户投稿
    100
  • 告别繁琐构造函数:使用建造者模式优化Java对象创建

    告别繁琐构造函数:使用建造者模式优化Java对象创建告别繁琐构造函数:使用建造者模式优化Java对象创建告别繁琐构造函数:使用建造者模式优化Java对象创建告别繁琐构造函数:使用建造者模式优化Java对象创建

    本文针对Java中处理多个可选参数时,传统构造函数组合繁琐的问题,详细介绍了建造者模式(Builder Pattern)。该模式通过分阶段构建对象,避免了大量参数构造函数和重复组合,提升了代码的可读性和可维护性。文章将通过代码示例深入解析建造者模式的实现原理与优势,并提供实际应用指导。 传统构造函数…

    2026年9月27日 • 用户投稿
    200
  • 怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南

    怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南怎么用豆包AI帮我生成JavaScript代码 快速生成JS代码的豆包AI使用指南

    使用豆包ai生成javascript代码的关键在于明确需求、提供清晰指令并进行结果优化。一要明确具体功能,如表单验证或dom操作,避免模糊提问;二要用结构化的中文指令,如“请用javascript写一个函数用来……”,并可添加兼容性等限制条件;三要检查生成代码的逻辑与语法,结合浏览器测试进行调整。实…

    2026年9月27日 • 用户投稿
    100
  • INSERT INTO插入数据时:如何避免列名缺失导致的语法错误?

    INSERT INTO插入数据时:如何避免列名缺失导致的语法错误?INSERT INTO插入数据时:如何避免列名缺失导致的语法错误?INSERT INTO插入数据时:如何避免列名缺失导致的语法错误?INSERT INTO插入数据时:如何避免列名缺失导致的语法错误?

    避免insert语句列名缺失错误的核心方法有:1.显式指定列名,确保即使表结构变化时语句仍有效;2.使用orm框架如sqlalchemy或hibernate,自动映射数据模型与数据库表;3.结合数据库迁移工具如flyway管理结构变更;4.编写单元测试验证sql语句的正确性;5.采用预编译语句提升安…

    2026年9月27日 • 用户投稿
    200
  • uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程

    uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程uc浏览器如何查看已保存的密码_UC浏览器已存账号密码查看教程

    首先通过UC浏览器密码管理功能查看保存的密码,手机端进入设置-隐私与安全-密码管理,验证身份后点击显示密码;电脑端在设置-其他-管理已保存的密码中查看,需验证系统账户;若无法直接查看,可使用开发者工具将密码框type属性由password改为text,临时明文显示密码。 如果您在使用UC浏览器时需要…

    2026年9月27日 • 用户投稿
    200
  • Android非Activity类中Toast消息的正确管理与调用

    Android非Activity类中Toast消息的正确管理与调用Android非Activity类中Toast消息的正确管理与调用Android非Activity类中Toast消息的正确管理与调用Android非Activity类中Toast消息的正确管理与调用

    本文旨在解决在Android非Activity类中调用Toast消息时遇到的类型不匹配问题。通过详细阐述Toast.makeText()方法对Context参数的要求,并提供将Activity的Context正确传递给静态工具方法的解决方案,实现Toast消息的集中管理和复用,从而提升代码的健壮性和…

    2026年9月27日 • 用户投稿
    300
  • 在win10系统怎么查看电脑显卡配置

    在win10系统怎么查看电脑显卡配置在win10系统怎么查看电脑显卡配置在win10系统怎么查看电脑显卡配置在win10系统怎么查看电脑显卡配置

    在win10系统中如何查看电脑显卡配置呢?不少小伙伴最近都遇到了这个难题,如果你还不太清楚具体的操作步骤,不用着急,本文将详细介绍在win10系统中查看电脑显卡配置的方法。 1、首先,我们可以在桌面空白处单击鼠标右键,然后选择“开始”按钮,在出现的菜单中找到并点击“运行”。 2、随后,在弹出的运行窗…

    2026年9月27日 • 用户投稿
    100
  • 淘宝精准人群话费高怎么办?如何做好精准人群运营?3大核心策略破解精准人群运营难题

    淘宝精准人群话费高怎么办?如何做好精准人群运营?3大核心策略破解精准人群运营难题淘宝精准人群话费高怎么办?如何做好精准人群运营?3大核心策略破解精准人群运营难题淘宝精准人群话费高怎么办?如何做好精准人群运营?3大核心策略破解精准人群运营难题淘宝精准人群话费高怎么办?如何做好精准人群运营?3大核心策略破解精准人群运营难题

    在淘宝平台的运营中,“精准人群推广成本居高不下”已成为困扰众多商家的核心难题。据最新统计,超60%的中小型卖家在广告投放过程中遭遇人群溢价严重、转化效果不佳的瓶颈。如何在确保流量精准性的同时有效降低推广支出?本文将深入剖析精准人群运营背后的底层逻辑,并提供切实可行的优化方案。 一、为何你的精准人群花…

    2026年9月27日 • 用户投稿
    100
  • windows怎么格式化u盘_Windows系统格式化U盘操作指南

    windows怎么格式化u盘_Windows系统格式化U盘操作指南windows怎么格式化u盘_Windows系统格式化U盘操作指南windows怎么格式化u盘_Windows系统格式化U盘操作指南windows怎么格式化u盘_Windows系统格式化U盘操作指南

    首先通过文件资源管理器、磁盘管理或命令提示符选择格式化方式,插入U盘后,依次按步骤操作:1. 文件资源管理器中右键U盘选择格式化,推荐exFAT文件系统并勾选快速格式化;2. 磁盘管理中找到U盘分区,设置为exFAT并执行快速格式化;3. 命令提示符以管理员运行,使用diskpart工具清理磁盘、创…

    2026年9月27日 • 用户投稿
    200
  • VSCode如何管理项目工作区 VSCode多文件夹工作区的使用技巧

    VSCode如何管理项目工作区 VSCode多文件夹工作区的使用技巧VSCode如何管理项目工作区 VSCode多文件夹工作区的使用技巧VSCode如何管理项目工作区 VSCode多文件夹工作区的使用技巧VSCode如何管理项目工作区 VSCode多文件夹工作区的使用技巧

    vscode通过.code-workspace文件实现多文件夹工作区管理,提供统一的开发上下文、跨项目搜索、集中式任务与调试配置及资源优化;1. 使用工作区可统一配置避免重复设置;2. 跨项目搜索更高效;3. 集中管理任务和调试复合配置;4. 比多个独立窗口更节省资源;5. 通过files.excl…

    2026年9月27日 • 用户投稿
    500
  • Grafana 随笔:安装篇

    Grafana 随笔:安装篇Grafana 随笔:安装篇Grafana 随笔:安装篇Grafana 随笔:安装篇

    grafana 是一款功能强大的开源可视化工具,适合与 zabbix、prometheus 等监控软件配合使用,生成美观且便捷的图表。 前言 前提条件 在开始安装之前,请确保已关闭 Selinux 和防火墙。 sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/…

    2026年9月27日 • 用户投稿
    200
  • 在Java中如何优化线程池大小

    线程池大小应根据任务类型和运行环境优化:CPU密集型设为CPU核心数+1,I/O密集型可设为核心数2~4倍;避免无界队列,选用有界队列并配置合理拒绝策略;通过监控活跃线程、队列长度等指标动态调优;优先使用ThreadPoolExecutor显式配置,避免Executors默认风险。 线程池大小的设置…

    2026年9月27日
    100
  • 推荐6款好用却不为人知的效率软件!

    推荐6款好用却不为人知的效率软件!推荐6款好用却不为人知的效率软件!推荐6款好用却不为人知的效率软件!推荐6款好用却不为人知的效率软件!

    随着科技的不断进步,越来越多的日常辅助软件工具被广泛应用于办公环境中。这些工具只是表达我们需求的一种方式,因此在不同的工作环境或个人习惯下,每个人的使用方式也会有所不同。 接下来,小编将为大家介绍6款实用但鲜为人知的效率软件,能够显著提升你的工作效率! MindMaster MindMaster是一…

    2026年9月27日 • 用户投稿
    200
  • Deepseek 满血版携手 Runway Gen-2,生成超逼真视频内容​

    Deepseek 满血版携手 Runway Gen-2,生成超逼真视频内容​Deepseek 满血版携手 Runway Gen-2,生成超逼真视频内容​Deepseek 满血版携手 Runway Gen-2,生成超逼真视频内容​Deepseek 满血版携手 Runway Gen-2,生成超逼真视频内容​

    ai视频生成技术已实现一句话生成高质量视频。runway gen-2与deepseek联手,支持文字转视频、图像变视频,涵盖写实、动画等多种风格,生成速度快,适合短视频创作、广告设计等场景;同时也能将静态图转化为动态内容,提升影视后期、游戏预览效率;但需注意清晰度、时长限制、动作逻辑问题及版权风险,…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么给robot framework文件设置高亮_sublime Robot Framework文件高亮配置

    sublime怎么给robot framework文件设置高亮_sublime Robot Framework文件高亮配置sublime怎么给robot framework文件设置高亮_sublime Robot Framework文件高亮配置sublime怎么给robot framework文件设置高亮_sublime Robot Framework文件高亮配置sublime怎么给robot framework文件设置高亮_sublime Robot Framework文件高亮配置

    首先安装Package Control,再通过它安装RobotFramework Assistant或Robot Framework Syntax Highlighting插件,接着将.robot文件关联为Robot Framework语法,最后验证关键字、变量、注释等是否正常高亮显示。 Subli…

    2026年9月27日 • 用户投稿
    600
  • Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程

    Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程

    1、通过启用“开发工具”可插入可点击打勾的复选框控件;2、使用Wingdings 2字体插入静态方框与对勾符号实现手动标记;3、利用表格单元格模拟方框并输入对勾符号用于打印或数字勾选;4、结合ActiveX控件与VBA实现高级交互功能,需保存为.docm格式。 如果您需要在Word文档中创建可打勾的…

    2026年9月27日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信