如何用for循环将列表批量追加至DataFrame列?iloc报错解析
问题解决与报错解析
一、iloc赋值报错原因
报错Must have equal len keys and value when setting with an iterable的核心原因是维度不匹配:
- 你的
count_x包含8个长度为7的子列表,对应7列数据;但df1.iloc[:,5:13]选取的是第5到第12列(左闭右开规则,共8列),两者列数(7 vs 8)不匹配。 - 另一系统能运行,要么是当时DataFrame的目标列数刚好为7,要么是
count_x的子列表长度为8,也可能是不同Pandas版本对赋值的兼容差异,但本质都是维度必须严格对应。
二、自动化追加列的实现方案
方案1:直接合并(最简方式)
无需手动处理列索引,直接将count_x转为DataFrame后和原表横向合并:
import pandas as pd # 示例初始DataFrame(根据你的实际结构调整) df1 = pd.DataFrame({ 'student name': ['S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8'], 'subject': ['SubA', 'SubA', 'SubA', 'SubA', 'SubA', 'SubA', 'SubA', 'SubA'] }) count_x = [ [7, 3, 4, 4, 2, 41, 8], [3, 9, 0, 8, 2, 22, 11], [2, 1, 0, 0, 2, 9, 1], [1, 0, 0, 0, 0, 2, 1], [2, 0, 0, 1, 2, 0, 9], [0, 0, 0, 0, 0, 3, 1], [0, 0, 0, 0, 0, 2, 0], [3, 2, 0, 8, 1, 10, 9] ] # 横向合并,自动新增7列 df1 = pd.concat([df1, pd.DataFrame(count_x)], axis=1)
方案2:for循环逐列追加
如果必须用for循环,先将count_x转置(把行转成列),再逐个添加:
# 转置count_x,得到7个长度为8的列表(对应7列数据) count_x_cols = list(zip(*count_x)) # 循环添加每一列 for idx, col_data in enumerate(count_x_cols): df1[f'score_{idx+1}'] = col_data # 自定义列名,或用len(df1.columns)作为列名
方案3:修正iloc赋值
如果坚持用iloc,需要确保目标列数和count_x的列数一致:
# 先确认原表有足够的列,或新增7个空列 for _ in range(7): df1[f'new_col_{len(df1.columns)}'] = None # 选取第5到第11列(共7列)赋值 df1.iloc[:, 5:12] = count_x
内容的提问来源于stack exchange,提问作者Chinmay
相关产品推荐
相关产品推荐

