Python Pandas中更新与编辑阵容列表问题求助
问题原因
你遇到的核心问题是列表的引用传递特性:Python中列表是可变对象,直接通过=赋值时,新变量只是指向原列表的内存地址,并非创建新列表。后续对当前行列表的修改会同步影响所有引用该列表的行,最终所有单元格都显示最后一次修改后的阵容。
解决方法
每次赋值时创建列表的副本,切断引用关联。可以用列表的copy()方法,或者切片[:]实现复制。
修改后的代码
for i in range(1, len(subs)): # 关键:创建上一行阵容的副本,而非直接引用 subs['vlineup'].iloc[i] = subs['vlineup'].iloc[i-1].copy() subs['hlineup'].iloc[i] = subs['hlineup'].iloc[i-1].copy() if subs['team'].iloc[i] == home: if subs['type'].iloc[i] == 'OUT': subs['hlineup'].iloc[i].remove(subs['checkname'].iloc[i]) elif subs['type'].iloc[i] == 'IN': subs['hlineup'].iloc[i].append(subs['checkname'].iloc[i]) elif subs['team'].iloc[i] == visitor: if subs['type'].iloc[i] == 'OUT': subs['vlineup'].iloc[i].remove(subs['checkname'].iloc[i]) elif subs['type'].iloc[i] == 'IN': subs['vlineup'].iloc[i].append(subs['checkname'].iloc[i])
额外提示
- 确保初始行(
i=0)的vlineup和hlineup是正确的初始阵容列表 - 如果处理大型数据集,
iloc循环效率较低,可考虑用pandas的cumsum或自定义函数结合shift()优化,但当前场景下副本方式已能解决问题
内容的提问来源于stack exchange,提问作者bblackburn
相关产品推荐
相关产品推荐

