如何使用Python或Excel实现数据集的行列格式转换(宽表转长表)
宽表转长表:Python和Excel实现方案
我来给你详细讲讲怎么把这种宽格式的表格转换成需要的长格式,两种方法都很实用,看你需求选👇
方法一:Python实现(适合批量/大量数据)
如果经常处理数据分析,用pandas库最快,几步就能搞定:
- 先处理数据的空值填充:原表格里
category和Sub-category的空单元格是继承上方内容的,读入后需要先把这些空值补上。 - 用
melt函数转长表:这是pandas专门用来做宽转长的工具,指定固定的列作为标识,把年份列转成行。
代码示例
import pandas as pd # 假设你的数据存在Excel里,读取时注意表头 df = pd.read_excel("你的数据文件.xlsx", header=0) # 向前填充空值,补全category和Sub-category的内容 df[['category', 'Sub-category']] = df[['category', 'Sub-category']].ffill() # 执行宽转长:id_vars是要保留的列,var_name是年份列的名称,value_name是数值列的名称 long_df = df.melt( id_vars=['category', 'Sub-category', 'Variable'], var_name='year', value_name='vals' ) # 查看结果或者保存 print(long_df) long_df.to_excel("转换后的长表.xlsx", index=False)
执行完后,你就能得到想要的长表格式,空值也会自动对应正确的分类~
方法二:Excel实现(适合小数据手动处理)
如果不想写代码,用Excel自带的Power Query工具(2016及以后版本自带,旧版本可以装插件)就能搞定:
步骤1:补全空单元格
原表格里category和Sub-category的空单元格是继承上方内容的,先把这些空值补上:
- 选中
category和Sub-category的所有单元格(包括空的) - 按
Ctrl+G打开定位窗口,点击「定位条件」→ 选择「空值」→ 确定 - 此时所有空单元格被选中,直接输入
=A2(假设第一个空单元格在A3,上方的内容在A2),然后按Ctrl+Enter,所有空值会自动填充上方的内容
步骤2:用Power Query逆透视
- 选中整个数据区域(包括表头)
- 点击「数据」选项卡 → 选择「从表格/区域」(如果弹出提示“表包含标题”,勾选后确定)
- 进入Power Query编辑器后,按住
Ctrl选中1990、1991、1992这三列 - 点击「转换」选项卡 → 选择「逆透视列」(如果看不到,找「逆透视其他列」也可以)
- 此时列名会变成「Attribute」和「Value」,双击列名改成
year和vals - 点击「关闭并上载」,转换后的长表就会出现在新的工作表里啦
内容的提问来源于stack exchange,提问作者Paras Chopra




