0

0

Pandas DataFrame宽表重构:使用 melt 转换扁平化嵌套数据

碧海醫心

碧海醫心

发布时间:2025-09-24 22:11:00

|

979人浏览过

|

来源于php中文网

原创

Pandas DataFrame宽表重构:使用 melt 转换扁平化嵌套数据

本教程将指导如何在Pandas中处理列数过多的宽表,特别是那些由扁平化嵌套JSON生成的数据。我们将利用 melt 函数将宽表转换为更易于管理的长格式,并通过后续的数据清洗和重塑操作,实现将单个实体(如员工)的详细信息从多列展开为多行,从而优化数据结构,提高分析效率。

1. 引言:处理超宽DataFrame的挑战

在数据处理和分析中,我们经常会遇到从复杂数据源(如嵌套的json或xml)扁平化而来的dataframe。这些数据源可能包含重复的结构,例如一个主实体(如公司)下包含多个子实体(如员工),每个子实体又有自己的多个属性。当这些子实体被扁平化到同一行时,就会生成大量的列,例如 employee_0_salary, employee_0_skills_0_id, employee_1_salary 等。当列数超过数百甚至上千时,这种超宽表结构不仅难以管理和理解,还可能在某些操作中遇到性能瓶颈,并且不符合数据分析的规范化要求。

我们的目标是将这些代表不同实例(如不同员工)的详细信息列重构为更简洁、规范的长格式。在这种长格式中,每个子实体的数据将占据一行,共享相同的列名(如 salary, skills_id),同时保留原始的主实体ID信息,使得数据更易于查询、聚合和分析。

2. 核心工具:pandas.melt() 函数

pandas.melt() 函数是Pandas中用于将DataFrame从宽格式转换为长格式的关键工具,也常被称为“unpivot”(逆透视)。它通过指定一个或多个标识符列(id_vars)和要“融化”的列,将其他列名转换为新的 variable 列,并将它们对应的值放入新的 value 列。

2.1 基本用法示例

我们首先创建一个模拟的超宽DataFrame,其结构类似于从扁平化JSON数据中常见的情况:

import pandas as pd
import re # 用于后续的正则表达式操作

# 模拟一个超宽 DataFrame
df = pd.DataFrame({
    'id': [1, 2, 1],
    'name': ['joe','sue', 'fred'],
    'employee_0_salary': [30000, 35000, 40000],
    'employee_0_skills_0_id': [101, 102, 103],
    'employee_0_skills_1_id': [103, 104, 105],
    'employee_1_salary': [32000, 36000, 37000],
    'employee_1_skills_0_id': [105, 106, 107],
    'employee_1_skills_1_id': [108, 109, 110], # 增加一个技能列以展示多技能情况
})

print("原始 DataFrame:")
print(df)

输出:

   id  name  employee_0_salary  employee_0_skills_0_id  \
0   1   joe              30000                     101   
1   2   sue              35000                     102   
2   1  fred              40000                     103   

   employee_0_skills_1_id  employee_1_salary  employee_1_skills_0_id  \
0                     103              32000                     105   
1                     104              36000                     106   
2                     105              37000                     107   

   employee_1_skills_1_id  
0                     108  
1                     109  
2                     110  

现在,我们使用 melt() 将所有员工相关的列进行“融化”。id_vars 参数指定了我们希望作为标识符保留的列,这些列在融化后将保持不变。

人民网AIGC-X
人民网AIGC-X

国内科研机构联合推出的AI生成内容检测工具

下载
meltdf = df.melt(id_vars=['id', 'name'])
print("\n使用 melt() 后的 DataFrame (长格式):")
print(meltdf.head(10)) # 只显示前10行

输出:

   id  name                variable  value
0    1   joe       employee_0_salary  30000
1    2   sue       employee_0_salary  35000
2    1  fred       employee_0_salary  40000
3    1   joe  employee_0_skills_0_id    101
4    2   sue  employee_0_skills_0_id    102
5    1  fred  employee_0_skills_0_id    103
6    1   joe  employee_0_skills_1_id    103
7    2   sue  employee_0_skills_1_id    104
8    1  fred  employee_0_skills_1_id    105
9    1   joe       employee_1_salary  32000

此时,所有原始的员工详细信息列(如 employee_0_salary)都被转换成了 variable 列中的字符串和 value 列中的对应值。id 和 name 列被保留,但由于每个原始行现在对应多个新行,id 和 name 值会出现重复。

3. 从长格式重构为员工实例表

melt() 后的DataFrame虽然是长格式,但 variable 列仍然包含了员工的数字索引(0, 1, ...

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

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

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

51

2025.12.04

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1874

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2085

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

984

2024.11.28

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.1万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号