如何使用Python将宽格式Excel表格转换为长格式?
将宽格式Excel数据转换为长格式(Python实现)
问题描述
现有Excel工作表数据格式如下(日期为表头列):
RESOURCENAME RESOURCETYPENAME 8/13/2022 8/6/2022 7/30/2022 7/23/2022 7/16/2022 7/9/2022 7/2/2022 LASTNAME:FIRSTNAME1 3P 41 43 45 41 42 40 44 LASTNAME:FIRSTNAME2 FTE 50 42 41 46 48 41 42 LASTNAME:FIRSTNAME3 FTE 40 42 41 41 41 40 40 LASTNAME:FIRSTNAME4 FTE 40 43 44 41 42 41 42
需要转换为以下长格式:
RESOURCENAME RESOURCETYPENAME DATE HOURS LASTNAME:FIRSTNAME1 3P 8/13/2022 41 LASTNAME:FIRSTNAME1 3P 8/6/2022 43 LASTNAME:FIRSTNAME1 3P 7/30/2022 45 LASTNAME:FIRSTNAME1 3P 7/23/2022 41 LASTNAME:FIRSTNAME1 3P 7/16/2022 42 LASTNAME:FIRSTNAME1 3P 7/9/2022 40 LASTNAME:FIRSTNAME1 3P 7/2/2022 44 LASTNAME:FIRSTNAME2 FTE 8/13/2022 50 LASTNAME:FIRSTNAME2 FTE 8/6/2022 42 LASTNAME:FIRSTNAME2 FTE 7/30/2022 41 LASTNAME:FIRSTNAME2 FTE 7/23/2022 46 LASTNAME:FIRSTNAME2 FTE 7/16/2022 48 LASTNAME:FIRSTNAME2 FTE 7/9/2022 41 LASTNAME:FIRSTNAME2 FTE 7/2/2022 42 ...
解决方案
用Python的pandas库可以快速完成这种宽表转长表的操作,步骤如下:
1. 依赖安装(未安装时执行)
在终端运行以下命令安装所需库:
pip install pandas openpyxl
openpyxl用于读取.xlsx格式文件,若处理.xls格式则替换为xlrd。
2. 代码实现
import pandas as pd # 读取Excel文件,替换为你的文件路径和工作表名 df = pd.read_excel('resource_hours.xlsx', sheet_name='Sheet1') # 执行宽表转长表操作 df_long = pd.melt( df, id_vars=['RESOURCENAME', 'RESOURCETYPENAME'], # 保持不变的标识列 var_name='DATE', # 原日期表头转为新列名 value_name='HOURS' # 原日期对应数值转为新列名 ) # 可选:按资源名称和日期排序,让结果更规整 df_long = df_long.sort_values(by=['RESOURCENAME', 'DATE']) # 将结果保存为新Excel文件,不保留索引列 df_long.to_excel('resource_hours_long.xlsx', index=False) # 打印查看转换后的结果 print(df_long)
关键说明
pd.melt()是pandas专门用于宽表转长表的工具函数,核心参数作用:id_vars:指定转换过程中每行保留不变的列;var_name:定义原表头(日期)转换后的新列名称;value_name:定义原表头对应数值转换后的新列名称。
- 执行代码后会生成符合要求的长格式Excel文件,也可以通过
print直接查看转换结果。
内容的提问来源于stack exchange,提问作者Tracy Wilson
相关产品推荐
相关产品推荐

