使用for循环为DataFrame填充列表列时所有行均显示最终列表的问题
问题原因
这是Python可变对象的引用机制导致的:
列表属于可变对象,你每次向rows中追加list_employe时,存入的并不是当前列表的内容副本,而是这个列表对象的内存引用。整个循环过程中你始终在修改同一个list_employe对象的内容,之前存入rows的所有引用都会同步跟随变化,最终生成DataFrame时,所有行的列表列就都会显示该对象最后一次修改后的状态。
修复方案
只需要在向rows追加数据时,存入list_employe的浅拷贝即可,修改对应行代码:
# 原代码 # rows.append([day, total_emp, new_emp, end_emp, list_employe]) # 修改为以下任意一种写法均可 rows.append([day, total_emp, new_emp, end_emp, list_employe.copy()]) # 也可以用切片写法:rows.append([day, total_emp, new_emp, end_emp, list_employe[:]]) # 也可以用类型转换:rows.append([day, total_emp, new_emp, end_emp, list(list_employe)])
内容的提问来源于stack exchange,提问作者John Mack
相关产品推荐
相关产品推荐

