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

Pandas中用loc修改DataFrame指定行列值失败,求解决方案

解决Pandas DataFrame行列值替换失败的问题

先还原你的问题场景:

我尝试将pandas DataFrame中第0行20至71列的值替换为第1行对应列的值,使用sub_data.loc[[0],20:71] = sub_data.loc[1,20:71]或sub_data.loc[0,20:71] = sub_data.loc[1,20:71]两种方式均未成功,请问有什么解决建议?

为什么loc赋值会失效?

这两种方式没生效,大概率是Pandas的索引对齐机制在搞鬼。当你用loc赋值时,右侧返回的是带列索引的Series,Pandas会自动尝试按列索引匹配赋值位置。如果你的DataFrame列索引不是连续整数(比如有缺失、是字符串类型),或者赋值过程触发了隐性的SettingWithCopyWarning(比如操作的是原DataFrame的切片副本),就会导致赋值没真正作用到原DataFrame上。

可行的解决方法

1. 你已经验证有效的方法:iloc.update()

iloc是纯位置索引,完全绕开了索引对齐的问题,update()方法会直接按位置把右侧的值覆盖到左侧,非常稳妥:

sub_data.iloc[0,20:71].update(sub_data.iloc[1,20:71])

2. 跳过索引对齐的loc赋值

如果还是想用loc,可以把右侧的Series转成numpy数组,这样Pandas就不会做索引对齐,直接按位置赋值:

sub_data.loc[0, 20:71] = sub_data.loc[1, 20:71].values

3. 直接用iloc赋值

同样基于位置索引,只要左右两侧形状匹配,直接赋值也能生效:

sub_data.iloc[0, 20:71] = sub_data.iloc[1, 20:71].values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:06:35