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

pandas使用.loc赋值时非预期行被修改的原因及解决方法

问题原因

pandas的.loc针对行的整数索引切片遵循左右端点均包含的规则,和Python原生列表左闭右开的切片逻辑不同:

  • 你代码中写的df.loc[0:2, ["col2", "col3"]]实际选中了索引为0、1、2的3行(对应A、B、C三行),这是C行被意外修改的核心原因
  • 同时右侧的源数据df.loc[2:4, ["col2", "col3"]]也选中了索引为2、3、4的3行,赋值时3行数据刚好对应覆盖左侧3行,C行就被源数据中E行的数值覆盖了。
解决方法

只要保证左侧选中的行数和你预期修改的行数(2行)匹配即可,有两种常用写法:

方法1:调整.loc的切片范围

把左侧的切片调整为0:1(包含索引0、1,共2行),右侧源数据调整为2:3(包含索引2、3,共2行):

df.loc[0:1, ["col2", "col3"]] = df.loc[2:3, ["col2", "col3"]].values

方法2:使用.iloc避免切片规则混淆

如果更习惯Python原生左闭右开的切片逻辑,可以用.iloc按位置选取:

# iloc左闭右开,0:2对应第0、1个位置的行,2:4对应第2、3个位置的行,刚好2行匹配
df.iloc[0:2, [1,2]] = df.iloc[2:4, [1,2]].values

两种写法运行后都能得到你预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:21:03