使用 df.at 更新 DataFrame 多行时避免列表引用共享问题
发布时间 - 2025-12-29 00:00:00 点击率:次在 pandas 中用 `df.at[index, col]` 循环赋值列表时,若直接赋值同一可变对象(如列表),所有行将指向内存中同一个列表实例,导致最终全部显示最后一次修改的结果;正确做法是每次赋值时传入 `.copy()` 或新建副本。
当你在循环中反复对 df.at[index, 'test'] 赋值同一个列表对象(如 lista)时,Pandas 并不会自动深拷贝该对象——它只是将该列表的引用存入每一行。由于 lista 是一个可变对象,后续 lista.append(...) 会持续修改其内容,所有已赋值的单元格都指向这个动态变化的同一内存地址,因此最终每行显示的都是循环结束时 lista 的最终状态。
✅ 正确解法:每次赋值前创建独立副本
使用 .copy()(浅拷贝)即可满足本例需求(因内层子列表本身是新生成的,无需深拷贝):
import pandas as pd
import random
# 构造初始 DataFrame
data = {
'col1': [random.randint(0, 100) for _ in range(5)],
'col2': [random.randint(0, 100) for _ in range(5)]
}
df = pd.DataFrame(data)
df['test'] = None
lista = []
for index, row in df.iterrows():
# 生成新的随机子列表
sublist = [random.randint(0, 100) for _ in range(5)]
lista.append(sublist)
# 关键:赋值时使用 lista.copy(),确保每行保存当前状态的独立快照
df.at[index, 'test'] = lista.copy()
print(f"Index {index}: {lista}")
print("\n最终 DataFrame:")
print(df[['test']])? 输出效果(示意):
Index 0: [[82, 14, 67, 33, 91]] Index 1: [[82, 14, 67, 33, 91], [5, 77, 22, 48, 96]] Index 2: [[82, 14, 67, 33, 91], [5, 77, 22, 48, 96], [31, 88, 12, 64, 50]] ...
⚠️ 注意事项:
- ❌ 避免 df.at[index, 'test'] = lista(无 .copy());
- ✅ 若子列表中还嵌套可变对象(如字典、其他列表),且需完全隔离,请改用 copy.deepcopy(lista);
- ⚡ 性能提示:频繁使用 iterrows() + df.at 属于显式循环,在大数据量下较慢;如逻辑允许,优先考虑向量化操作或 cumsum()/expanding() 等内置累积方法;
- ? 替代思路(更 Pythonic):可用列表推导式预生成所有中间状态,再一次性赋值,避免循环中重复引用问题。
总结:Pandas 的标量赋值不自动克隆可变对象。理解「引用 vs 副本」是安全操作嵌套数据结构的关键——尤其在 df.at、df.loc 或 Series 赋值场景中,务必主动管理对象生命周期。
# python
# 大数据
# app
# pandas
# 循环
# 数据结构
# append
# copy
# 对象
# 都是
# 是一个
# 你在
# 将该
# 结束时
# 较慢
# 单元格
# 本例
# 景中
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
如何在局域网内绑定自建网站域名?
如何在宝塔面板创建新站点?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
如何用AI帮你把自己的生活经历写成一个有趣的故事?
Laravel如何升级到最新版本?(升级指南和步骤)
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
制作旅游网站html,怎样注册旅游网站?
Laravel怎么清理缓存_Laravel optimize clear命令详解
开心动漫网站制作软件下载,十分开心动画为何停播?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
如何快速搭建高效简练网站?
JS去除重复并统计数量的实现方法
微信小程序 配置文件详细介绍
如何制作一个表白网站视频,关于勇敢表白的小标题?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何在自有机房高效搭建专业网站?
IOS倒计时设置UIButton标题title的抖动问题
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Python文件流缓冲机制_IO性能解析【教程】
b2c电商网站制作流程,b2c水平综合的电商平台?
用v-html解决Vue.js渲染中html标签不被解析的问题
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何实现javascript表单验证_正则表达式有哪些实用技巧
教你用AI润色文章,让你的文字表达更专业
如何在Windows虚拟主机上快速搭建网站?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel Fortify是什么,和Jetstream有什么关系
HTML 中动态设置元素 name 属性的正确语法详解
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
如何用y主机助手快速搭建网站?
高防服务器租用如何选择配置与防御等级?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何快速搭建高效WAP手机网站吸引移动用户?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Laravel如何实现文件上传和存储?(本地与S3配置)
在线教育网站制作平台,山西立德教育官网?
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
如何在云主机上快速搭建多站点网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?

