如何将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
相关产品推荐
相关产品推荐

