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

Pandas匹配另一组DataFrame为对应工作表新增列及报错解决

报错原因

报错来自两个代码逻辑错误:

  • 字典遍历的变量接收顺序写反。for sheet, name in bg_d.items()遍历字典时,第一个返回值是字典的键(也就是Sheet1/Sheet2这类字符串类型的工作表名),第二个返回值才是存储实验数据的DataFrame。你把字符串类型的工作表名当成DataFrame执行sheet["Plate"] = val的列赋值操作,字符串本身不支持键值赋值,直接触发类型错误。
  • 多余的双层嵌套循环。两个字典的键完全一一对应(都是相同的工作表名),不需要遍历identifier的所有条目,双层循环还会导致同一个DataFrame被重复赋值、重复追加到结果列表,最终数据完全错乱。
正确实现代码

不需要嵌套循环,直接通过工作表名匹配两个字典的对应数据即可,完整代码如下:

import pandas as pd

# 原有Excel读取逻辑保持不变
bg_d = pd.read_excel(f, sheet_name=None, index_col=None, usecols="C:N", skiprows=23, nrows=8)
identifier = pd.read_excel(f, sheet_name=None, index_col=None, header=None, usecols="B", skiprows=13, nrows=1)

bg_sheets = []
for sheet_name, data_df in bg_d.items():
    # 按当前工作表名取对应的样本标识
    sample_tag = identifier[sheet_name].iloc[0, 0]
    # 新增标识列
    data_df["Plate"] = sample_tag
    # 调整列顺序,将标识列移到最左侧
    data_df = data_df[["Plate"] + list(data_df.columns[:-1])]
    bg_sheets.append(data_df)

# 合并所有工作表数据得到最终结果
final_df = pd.concat(bg_sheets, ignore_index=True)

运行后final_df的结构完全符合需求:每行以样本标识开头,后续依次是12列实验指标数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:36:14