You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在pandas中使用Copy-on-Write批量设置DataFrame值的正确方法

在Pandas Copy-on-Write机制下修改DataFrame位置值的正确方式

假设我们有如下DataFrame:

df = pd.DataFrame([["a", 1], ["b", 2], ["c", 3]], columns=["let", "num"])

输出结果:

let  num
0   a    1
1   b    2
2   c    3

问题分析

你当前使用的df["num"].iloc[1:] = 22属于链式赋值,虽然当前版本能临时生效,但在Pandas 3.0默认启用Copy-on-Write机制后,这种写法将完全无法修改原始DataFrame——因为链式调用中生成的中间对象会被视为原数据的副本,赋值操作只会作用于副本,原DataFrame不会有任何变化,同时会抛出明确的错误。

正确写法

要保证在Copy-on-Write机制下能正确修改原数据,必须使用单步索引赋值,直接定位到目标区域:

方式1:用loc结合行索引范围

通过df.index[1:]获取目标行的标签,配合列名完成定位:

df.loc[df.index[1:], "num"] = 22

方式2:用iloc进行纯位置定位

直接指定行的位置范围和列的位置("num"列的位置是1):

df.iloc[1:, 1] = 22

两种方式执行后,原始DataFrame都会正确更新为:

let  num
0   a    1
1   b   22
2   c   22

内容的提问来源于stack exchange,提问作者YGA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:39:56