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

如何通过存储DataFrame.loc结果的变量修改原DataFrame数据?

问题:如何通过Series变量修改原DataFrame数据?

给定如下DataFrame:

df = pd.DataFrame({'x':[1,2,3], 'y':[4,5,6]})

直接使用df.loc可以一行修改原数据:

df.loc[df['x'] > 1, 'y'] = 7

但如果将loc的查询结果存入变量后,直接对变量赋值只会改变变量本身,无法同步修改原DataFrame的y列:

sel = df.loc[df['x'] > 1, 'y']
sel = 9  # 此操作仅修改sel变量,原df不受影响

可行解决方案

1. 修改Series的.values属性

通过访问Series的.values直接操作底层numpy数组,这种方式会同步修改原DataFrame的数据:

sel = df.loc[df['x'] > 1, 'y']
sel.values = 9

执行后查看原DataFrame:

print(df)
# 输出:
#    x  y
# 0  1  4
# 1  2  9
# 2  3  9

2. 使用切片赋值操作

通过sel[:]的切片方式赋值,本质是对整个Series视图进行修改,而非重新绑定变量:

sel = df.loc[df['x'] > 1, 'y']
sel[:] = 9

3. 使用update()方法更新

利用pd.Series.update()方法,将新值匹配索引后更新到原Series对应位置,同样会同步修改原DataFrame:

sel = df.loc[df['x'] > 1, 'y']
sel.update(pd.Series([9, 9], index=sel.index))

原理说明

当执行sel = df.loc[df['x'] > 1, 'y']时,sel通常是原DataFrame中y列的视图(而非独立副本),但直接执行sel = 9是给变量sel重新绑定了一个标量值,切断了和原DataFrame的关联。而上述方法都是直接操作视图对应的底层数据或视图本身,因此能同步修改原DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:48:18