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

如何编写通用函数实现pandas DataFrame指定列的就地修改

解决方案

你当前代码无法修改原df对象的核心原因是:函数内的pd_series = xxx是对局部变量重新赋值,仅会改变局部变量的指向,不会修改传入的原始Series对象。要实现原地修改,直接对Series的内容做切片赋值操作即可,无需引用原始DataFrame:

import scipy.stats
from scipy.stats import norm
import pandas as pd

df = pd.DataFrame({'id':list(range(0,7)), 'pr':[26,54,73,30,58,42,88]}) 

def NCE_to_PR(pd_series):
    # 用[:]切片赋值实现原地修改,不会改变变量指向,直接修改原Series内容
    pd_series[:] =  (norm.cdf((pd.to_numeric(pd_series)-50)/21.06))*100
    print(pd_series)

NCE_to_PR(df.pr)
# 此时打印df可看到pr列已经被修改
print(df)

原理说明

  • pd_series[:] = 新值属于切片赋值操作,会直接修改Series对象底层存储的数据,不会生成新的对象,因此原始DataFrame对应的列会同步更新
  • 该方案为通用实现,不需要在函数内部引用原始DataFrame,仅依赖传入的Series对象即可完成原地修改

注意:如果传入的Series是原始DataFrame列的副本而非视图,该方法不会生效。常规场景下通过df.列名、df['列名']取出的列都是视图,可正常完成原地修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:48:03