You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将df1设为表头合并两个DataFrame?解决KeyError问题

问题与解决方案

问题概述

现有两个DataFrame:df1存储表头文本,df2为数据行。尝试将df1设为表头导出CSV时触发KeyError,提示表头内容不在df2的列名中。

数据结构

  • df1(表头内容,单列DataFrame):
0         AREA
1       DETAIL
2             
3       ACTION
4     COMMENTS
5        MEDIA
  • df2(数据行,列名为0-6):
0  ... 6
0  Back\nYard/Exterior  ...  
1          Dining Room  ...  
2                Entry  ...  
3                Entry  ...  
4     Garage/Parki\nng  ...  
5     Garage/Parki\nng  ... 

原错误代码

df1 = table1[0].df
header = df1.iloc[0]  # 错误:仅提取了df1第一行,而非全部表头内容
headers = header.values.tolist()
df2 = table2[0].df
df2.to_csv('my_csv.csv', columns=headers)  # 错误:df2列名为数字索引,与表头文本不匹配

错误信息

KeyError: "None of [Index(['\uf279 AREA', '\uf276 DETAIL', '\uf2c8', '\uf7d9 ACTION', '\uf27a COMMENTS', '\uf87c MEDIA'], dtype='object')] are in the [columns]"


可行解决方案

核心逻辑是直接替换df2的列名为df1的表头内容,而非通过columns参数筛选(df2原列名是数字索引,和表头文本无匹配关系)。

步骤1:提取完整表头

df1是单列结构,需取出所有行的内容作为新表头:

# 提取df1所有行的文本,转为列表
new_headers = df1.iloc[:, 0].values.tolist()

步骤2:适配df2的列数

df2有7列(0-6),但df1仅提供6个表头项,需补充最后一列的名称(可设为空或自定义):

# 补充最后一列名称,保证列数一致
new_headers.append('Unnamed')  # 也可以用空字符串''

步骤3:替换列名并导出CSV

# 给df2设置新表头
df2.columns = new_headers

# 导出CSV,index=False避免导出多余的索引列
df2.to_csv('my_csv.csv', index=False)

完整代码

# 读取两个DataFrame
df1 = table1[0].df
df2 = table2[0].df

# 处理表头并适配列数
new_headers = df1.iloc[:, 0].values.tolist()
new_headers.append('Unnamed')

# 设置表头并导出
df2.columns = new_headers
df2.to_csv('my_csv.csv', index=False)

内容的提问来源于stack exchange,提问作者Tonin thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:55:12