创建空pandas DataFrame后通过循环赋值报索引越界错误如何解决?
空DataFrame循环赋值报错的解决方法
报错原因
你初始化的是长度为0的空DataFrame,没有任何行数据,直接通过df['pred'][i]的链式索引赋值时,无法找到对应下标的行,因此触发index 0 is out of bounds的越界报错。
解决方案
方案1:先收集全量数据再构造DataFrame(最高效,优先推荐)
循环过程中先把数据存入列表,所有数据生成完成后一次性转成DataFrame,避免循环中频繁修改DataFrame结构,性能最优:
import pandas as pd data_list = [] for i in range(5): # 按pred、sim的顺序存入数据 data_list.append([i, i]) df = pd.DataFrame(data_list, columns=['pred', 'sim'])
方案2:使用loc按索引逐行赋值
如果确实需要逐行新增数据,可以用loc索引器赋值,pandas会自动创建不存在的索引行:
import pandas as pd df = pd.DataFrame(columns = ['pred', 'sim']) for i in range(5): df.loc[i, 'pred'] = i df.loc[i, 'sim'] = i
注意:pandas 2.0及以上版本已经移除了
DataFrame.append()方法,不建议再用append逐行添加数据的方案。
小提示:如果要插入的数据量很大,逐行操作DataFrame的性能会非常差,优先选方案1
内容的提问来源于stack exchange,提问作者reem alfouzan
相关产品推荐
相关产品推荐

