Python行转列:请求Pandas melt/stack方法实现步骤指导
用Pandas的melt/stack转换数据格式
一、使用melt函数实现宽表转长表
melt是Pandas处理宽转长的核心工具,关键是明确不需要转换的标识符列和要展开的数值列。
示例操作
假设你的源数据是典型的宽表结构:
import pandas as pd # 构造示例数据(对应你表格中的宽表格式) df = pd.DataFrame({ "姓名": ["张三", "李四"], "数学": [90, 78], "语文": [85, 92], "英语": [88, 80] })
执行转换:
# id_vars:保留不变的列;var_name:原列名转换后的新列名;value_name:原列值对应的新列名 melted_df = df.melt( id_vars="姓名", var_name="科目", value_name="分数" )
如果需要指定特定列转换,加上value_vars参数即可:
melted_df = df.melt( id_vars="姓名", value_vars=["数学", "语文"], # 只转换这两列 var_name="科目", value_name="分数" )
二、使用stack函数实现转换
stack更适合处理带索引的表格,通过将列标签“堆叠”为行索引来实现宽转长。
示例操作
# 先将标识符列设为索引 df_indexed = df.set_index("姓名") # 堆叠列标签到行,再重置索引转为DataFrame stacked_df = df_indexed.stack().reset_index() # 重命名列名匹配目标格式 stacked_df.columns = ["姓名", "科目", "分数"]
三、常见错误排查
- 未指定
id_vars:会导致所有列被转换,丢失关键标识信息 - 列名不匹配:确保
var_name和value_name与目标格式的列名一致 - 多层表头问题:如果源表有多层列标签,需要先通过
df.columns = df.columns.map('_'.join)合并层级,再进行转换
内容的提问来源于stack exchange,提问作者Kunal Arora
相关产品推荐
相关产品推荐

