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

为Pandas两列应用函数并赋值回原DataFrame时遇FutureWarning的解决方法

解决方法

1. 修复自定义函数的索引方式(消除警告)

警告的根源是:当apply(axis=1)处理每行时,传入函数的mean_std是一个Series对象,直接用[0]/[1]按位置取值的方式在未来版本会被废弃,改为将整数视为标签名而非位置。因此需要用iloc明确指定按位置访问:

def log_normal_transform(mean_std):
    # 用iloc按位置获取第0、1个元素
    mu = mean_std.iloc[0]
    sigma = mean_std.iloc[1]
    return mu*2, sigma*2

2. 正确赋值回原DataFrame(避免长度不匹配)

不需要用.values.tolist(),可以通过apply的result_type='expand'参数直接将返回的元组序列展开为DataFrame,再直接赋值回原列:

df = pd.DataFrame({'mean': [3, 11, 9, 19, 22],
                   'std': [10, 17, 10, 25, 30]})

# 执行转换并直接展开为DataFrame赋值
df[['mean', 'std']] = df[['mean', 'std']].apply(log_normal_transform, axis=1, result_type='expand')

额外推荐:矢量化操作(更高效)

如果你的真实对数正态转换逻辑可以用矢量化实现(而非逐行apply),建议优先使用这种方式,效率远高于apply:

以真实的对数正态分布参数转换公式为例:

import numpy as np

# 计算mu和sigma(真实对数正态转换逻辑)
df['mu'] = np.log(df['mean'] ** 2 / np.sqrt(df['std'] ** 2 + df['mean'] ** 2))
df['sigma'] = np.sqrt(np.log(1 + (df['std'] ** 2) / (df['mean'] ** 2)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:31:06