处理Excel两行表头并整理为一维表的Python实现

学习笔记作者:admin日期:2025-07-09点击:23

摘要:本文介绍了如何处理Excel中具有两行表头的数据,将年份和月日合并为完整日期,并通过Python代码将其转换为一维表。

1. 背景与问题

在处理Excel文件时,有时会遇到两行表头的情况。例如,第一行是年份(如2025),第二行是具体的日期(如01-02、01-03等)。这种情况下,直接使用`pandas.read_excel()`读取可能会导致列名混乱,因此需要手动处理。

2. 解决方案

为了将这种数据整理为一维表,可以按照以下步骤进行:

2.1 读取Excel文件

      使用`pandas.read_excel()`读取Excel文件时,跳过第一行无用的标题,只保留第二行为实际列名。

import pandas as pd

df = pd.read_excel("a.xlsx", header=1)

2.2 处理列名

      由于第一行是年份,第二行是月日,需要将它们拼接成完整的日期格式(如2025-01-02)。

columns = list(df.columns)
date_columns = columns[3:]
new_column_names = {col: f"2025-{col}" for col in date_columns}
df.rename(columns=new_column_names, inplace=True)

2.3 转换为一维表

      使用`melt`函数将宽格式数据转换为长格式,以便于后续分析。

df_melted = df.melt(
    id_vars=["采购交货计划主表ID", "工厂", "物料"],
    var_name="日期",
    value_name="数量"
)

2.4 排序与保存

      对结果进行排序,并保存为新的Excel文件。

df_melted.sort_values(by=["采购交货计划主表ID", "日期"], inplace=True)
df_melted.reset_index(drop=True, inplace=True)
df_melted.to_excel("output_cleaned.xlsx", index=False)

3. 输出结果示例

| 采购交货计划主表ID | 工厂 | 物料 | 日期 | 数量 | |--------------------|------|------|------------|------| | 1 | fz | H002 | 2025-01-02 | 6 | | 1 | fz | H002 | 2025-01-03 | 8 | | 1 | fz | H002 | 2025-01-04 | 9 | | 1 | fz | H002 | 2025-01-05 | 8 | | 1 | fz | H002 | 2025-01-06 | 9 | | 2 | fz | H003 | 2025-01-02 | 16 | | 2 | fz | H003 | 2025-01-03 | 82 | | 2 | fz | H003 | 2025-01-04 | 9 | | 2 | fz | H003 | 2025-01-05 | 8 | | 2 | fz | H003 | 2025-01-06 | 9 |

4. 手动操作Excel的替代方法

如果不想使用Python,也可以手动操作Excel:

  • 删除第一行无意义的“年”信息。
  • 在Power Query中:将“01-02”等列转换为“日期”类型,添加自定义列拼接年份。
  • 使用【逆透视其他列】功能将日期转为字段。
  • 导出结果即可。

5. 总结

| 步骤 | 操作 | |------|------| | 1️⃣ | 读取Excel,跳过第一行 | | 2️⃣ | 手动拼接年份和月日,形成完整日期列名 | | 3️⃣ | 使用 `melt` 转换为一维表 | | 4️⃣ | 排序、保存输出文件 | 如果你提供具体的文件路径或更多字段,我可以帮你生成完整可运行的脚本 ?

上一篇      下一篇