为何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
相关产品推荐
相关产品推荐

