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

Python中DataFrame单元格赋值失败,报ValueError错误求助

问题分析与解决

错误原因

你的代码存在两个核心问题:

  1. iloc索引使用错误:iloc是基于整数位置的索引,第二个参数不能直接传入列名'RepEvnumb',必须使用列的整数位置索引。
  2. 赋值长度不匹配:尝试给单个单元格赋值列表时,pandas默认会尝试将列表作为序列广播到选中区域,但你选中的是单个单元格(长度1),而目标列表长度为2,因此触发ValueError。

修复方案

方案1:使用loc按行标签+列名定位(推荐)

loc支持直接用行标签和列名定位单元格,赋值列表时不会触发广播逻辑:

dd['RepEvnumb'] = ''
dd['RepEvnumb'] = dd['RepEvnumb'].astype('object')
b = [{'group_id': 'E1', 'subjects_affected': '0', 'subjects_at_risk': '104'},
     {'group_id': 'E2', 'subjects_affected': '0', 'subjects_at_risk': '105'}]
# 定位第0行的RepEvnumb列并赋值列表
dd.loc[dd.index[0], 'RepEvnumb'] = [dic['subjects_affected'] for dic in b]

方案2:修正iloc的列索引

先通过columns.get_loc()获取列的整数位置,再用iloc定位:

dd['RepEvnumb'] = ''
dd['RepEvnumb'] = dd['RepEvnumb'].astype('object')
b = [{'group_id': 'E1', 'subjects_affected': '0', 'subjects_at_risk': '104'},
     {'group_id': 'E2', 'subjects_affected': '0', 'subjects_at_risk': '105'}]
# 获取RepEvnumb列的整数位置
col_pos = dd.columns.get_loc('RepEvnumb')
# 用iloc定位并赋值
dd.iloc[0, col_pos] = [dic['subjects_affected'] for dic in b]

验证

执行上述代码后,通过dd.iloc[0]['RepEvnumb']可查看结果,会得到['0', '0'],说明列表已成功存入目标单元格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:10:42