如何将 Pandas DataFrame 转置后导出为 Excel 文件

本文详解如何正确转置含关键词-值对的 dataframe 并导出为 excel,解决 `pivot()` 中 `index=none` 导致的 keyerror,并提供两种简洁、健壮的转置方案。

在从 Word 文档中提取结构化信息(如候选人简历字段)并写入 Excel 的流程中,常需将“关键词-值”纵向列表(每行一个字段)转换为横向表单(每列一个字段,单行汇总),即实现 DataFrame 转置。原始代码使用 df.pivot(index=None, ...) 报错,根本原因在于 pivot() 方法要求 index 参数必须是有效的列名或列名列表,而 None 不被接受——Pandas 尝试将其作为列索引查找,最终抛出 KeyError: None。

✅ 正确且推荐的做法是:先将 'Keyword' 设为行索引,再调用 .T(等价于 .transpose())完成转置。这种方式逻辑清晰、语义明确,且天然适配“单关键词→单值”的一对一映射场景:

def generate_excel_from_data(data, selected_keys, output_file):
    df = pd.DataFrame(data, columns=['Keyword', 'Value'])
    filtered_df = df[df['Keyword'].isin(selected_keys)]

    # ✅ 推荐:设 Keyword 为索引后转置 → 得到 1 行 × N 列的宽表
    transposed_df = filtered_df.set_index('Keyword').T.reset_index(drop=True)

    # 可选:重命名列名为原 Keyword 值(若需保留可读性)
    transposed_df.columns.name = None  # 清除列索引名称

    transposed_df.to_excel(output_file, index=False)

⚠️ 注意事项:

  • 若原始 extracted_data 中存在重复关键词(如多个“Remarks”),set_index('Keyword') 会报 ValueError: duplicate labels。此时应先去重(如取首次出现值):
    filtered_df = filtered_df.drop_duplicates(subset='Keyword', keep='first')
  • .T 默认保留原索引作为新列名;.reset_index(drop=True) 可移除冗

    余索引,确保导出 Excel 时首行为纯字段名;
  • 避免使用 df.transpose() 直接转置原始两列 DataFrame(Keyword 和 Value):这会产生 2 行 × N 列结果(第0行是关键词,第1行是对应值),不符合“单行汇总”需求。

? 进阶提示:若后续需支持多记录(如批量处理多份简历),建议改用 pd.concat() 按行堆叠多个 transposed_df,再统一导出,即可生成标准的“每行一人、每列一字段”的二维 Excel 表格。

综上,用 set_index().T 替代错误的 pivot(index=None) 是最直接、可靠且符合业务语义的解决方案,兼顾代码可读性与执行鲁棒性。