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

为何修改Pandas DataFrame行数据无法同步更新原DataFrame?

Pandas iterrows() 修改行后原DataFrame不更新的原因

这是预期行为吗?

是的,这完全是Pandas的预期行为。你通过iterrows()拿到的row是原DataFrame行数据的副本,不是对原数据的引用,所以修改这个row只会改变副本的值,不会同步到原DataFrame中。

为什么iterrows()返回的是副本而非引用?

核心原因是Pandas的底层存储设计:DataFrame是按列存储的,每一列对应一块连续的内存(基于NumPy数组)。而一行数据是跨多个列的,分散在不同的内存块里。如果要返回行的引用,意味着每次修改行元素都要操作多个独立的内存块,这会极大降低性能,违背了Pandas为列级批量操作优化的设计目标。

所以iterrows()会返回一个包含行索引和行数据副本(Series对象)的元组,你对这个Series的修改不会影响原DataFrame的底层数据。

如何让行修改同步到原DataFrame?

如果你确实需要行级循环修改(注意:Pandas不推荐行级循环,列级向量操作效率远更高),可以通过索引直接修改原DataFrame:

import pandas as pd

fruit = {"Fruit": ['Apple','Avacado','Banana','Strawberry','Grape'],
         "Color": ['Red','Green','Yellow','Pink','Green'],
         "Price": [45, 90, 60, 37, 49]}

df = pd.DataFrame(fruit)

for index, row in df.iterrows():
    # 直接通过loc修改原DataFrame的对应位置
    df.loc[index, 'Price'] = row['Price'] * 2
    print(df.loc[index, 'Price'])

print(df['Price']) # 现在原DataFrame的Price列已经被更新

当然,对于这种简单的数值翻倍操作,最推荐的还是Pandas的列级向量操作,代码更简洁且效率极高:

df['Price'] = df['Price'] * 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:15:34