如何使用Pandas的melt方法规整DataFrame得到整洁格式数据
Pandas DataFrame melt 整洁化处理方案
- 首先修复原代码的语法错误:构造DataFrame时列定义列表缺少闭合方括号,修复后可正常初始化数据集。
- 先明确核心逻辑:
melt是Pandas专门用于宽表转长表的函数,目标是输出符合整洁数据规范的结果:每一行对应1个独立观测,每一列对应1个独立变量,每个单元格存储单个值。
针对你提供的数据集的处理代码
你当前构造的mydt本身已经是标准长表结构,若要强制通过melt完成规整,将样本编号、处理组作为固定标识列,测量值作为观测列,代码如下:
import pandas as pd # 修复后的原始数据集构造代码 dt = {'Ind': {0: 'Ind1', 1: 'Ind2', 2: 'Ind3', 3: 'Ind4', 4: 'Ind5', 5: 'Ind6', 6: 'Ind7', 7: 'Ind8', 8: 'Ind9', 9: 'Ind10', 10: 'Ind1', 11: 'Ind2', 12: 'Ind3', 13: 'Ind4', 14: 'Ind5', 15: 'Ind6', 16: 'Ind7', 17: 'Ind8', 18: 'Ind9', 19: 'Ind10'}, 'Treatment': {0: 'Treat', 1: 'Treat', 2: 'Treat', 3: 'Treat', 4: 'Treat', 5: 'Treat', 6: 'Treat', 7: 'Treat', 8: 'Treat', 9: 'Treat', 10: 'Cont', 11: 'Cont', 12: 'Cont', 13: 'Cont', 14: 'Cont', 15: 'Cont', 16: 'Cont', 17: 'Cont', 18: 'Cont', 19: 'Cont'}, 'value': {0: 4.5, 1: 8.3, 2: 6.2, 3: 4.2, 4: 7.1, 5: 7.5, 6: 7.9, 7: 5.1, 8: 5.8, 9: 6.0, 10: 11.3, 11: 11.6, 12: 13.3, 13: 12.2, 14: 13.4, 15: 11.7, 16: 12.1, 17: 12.0, 18: 14.0, 19: 13.8}} mydt = pd.DataFrame(dt, columns = ['Ind', 'Treatment', 'value']) # 使用melt做整洁化处理 tidy_dt = mydt.melt( id_vars = ['Ind', 'Treatment'], value_vars = ['value'], var_name = 'metric', value_name = 'measured_value' )
如果你不需要额外保留
metric列(该列所有值均为value),直接执行tidy_dt = tidy_dt.drop(columns=['metric'])即可,得到的结果和原表结构完全一致。
常见场景补充:宽表转长表的melt写法
多数情况下需要用melt的初始数据是宽表格式(即不同处理组的测量值分散在多个列中),比如将你当前的长表透视为宽表后,用melt转回整洁长表的代码如下:
# 先构造常见的初始宽表格式:Ind为行,Cont、Treat为两个数值列 wide_dt = mydt.pivot(index='Ind', columns='Treatment', values='value').reset_index() # 宽表转整洁长表的标准melt写法 tidy_from_wide = wide_dt.melt( id_vars = ['Ind'], value_vars = ['Cont', 'Treat'], var_name = 'Treatment', value_name = 'value' )
运行后得到的tidy_from_wide和你最初构造的mydt结构完全一致,是符合要求的整洁数据集。
内容的提问来源于stack exchange,提问作者KJ H
相关产品推荐
相关产品推荐

