Python中DataFrame单元格赋值失败,报ValueError错误求助
问题分析与解决
错误原因
你的代码存在两个核心问题:
- iloc索引使用错误:
iloc是基于整数位置的索引,第二个参数不能直接传入列名'RepEvnumb',必须使用列的整数位置索引。 - 赋值长度不匹配:尝试给单个单元格赋值列表时,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
相关产品推荐
相关产品推荐

