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

Pandas DataFrame修改值:.iloc与.loc的区别及循环赋值方法

一、iloc赋值失败的核心原因

你使用df1.iloc[k]["value 2"]赋值属于典型的链式索引操作:第一步df1.iloc[k]会取出对应行的Series对象,这个操作在pandas中绝大多数场景下返回的是原数据的副本,而非指向原DataFrame的视图。后续你对这个临时副本对象执行["value 2"] = xxx赋值,只会修改临时副本,不会作用到原始的df1上,部分运行环境下还会触发SettingWithCopyWarning警告,本质就是pandas在提醒你当前赋值可能不会生效。

二、DataFrame赋值的最优方案

1. 必须用循环的场景

最简单稳定的写法就是你调整后的loc写法,同时指定行索引和列名完成赋值:
df.loc[行位置/行筛选条件, 列名] = 赋值内容
这种写法直接操作原始DataFrame对象,不会生成临时副本,赋值100%作用到原数据上。

2. 更推荐的无循环向量化方案

你的匹配更新场景完全不需要写循环,用pandas内置的映射操作一行就能实现,代码更简洁,处理万级以上数据时性能比循环高几十倍:

import pandas as pd
d1 = {"KEY": ["KEY1", "KEY2", "KEY3"], "value": ["A", "B", "C"]}
df1 = pd.DataFrame(d1)

d2 = {"KEY": ["KEY2"], "value_alternative": ["D"]}
df2 = pd.DataFrame(d2)

# 生成KEY到替代值的映射字典
key_map = df2.set_index("KEY")["value_alternative"].to_dict()
# 匹配替换,未匹配到的用原value列填充
df1["value 2"] = df1["KEY"].map(key_map).fillna(df1["value"])

内容的提问来源于stack exchange,提问作者Mr.Hedge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:04