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

为何Pandas的iloc与at方法返回值不同?

Pandas中iloc与at修改后返回值不一致的原因分析

你遇到的问题核心是链式索引的副本/视图混淆,具体原因如下:

  • df.iloc[i]["X"]属于链式索引操作:这是两次连续的索引调用,df.iloc[i]会返回原DataFrame对应行的副本(Pandas在多数场景下无法明确返回视图还是副本,这也是SettingWithCopyWarning的触发原因)。你后续用df.at[i,"X"] = 0.0修改的是原DataFrame的数据,但之前通过iloc[i]["X"]获取的是副本里的旧值,自然不会同步更新。
  • df.at[i,"X"]是直接索引操作:这是Pandas专门用于快速访问单个元素的方法,它直接操作原DataFrame的内存数据,修改会立即反映在原DataFrame上,所以第二次打印能看到0.0。

如果想要获取修改后的最新值,需要直接从原DataFrame中读取,而不是依赖之前链式索引返回的副本,比如修改最后一行代码:

df = deepcopy(another dataframe)
print(df.iloc[i]["X"], end="\t")
df.at[i,"X"] = 0.0
print(df.at[i,"X"], end="\t")
# 直接从原DataFrame读取最新值
print(df.loc[i, "X"])
# 或者用iloc结合at
print(df.iloc[i].at["X"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:04:52