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

Pandas未用整数键却触发Series.__getitem__弃用警告的原因与解决

问题:用均值替换DataFrame列值触发FutureWarning

尝试用均值替换Pandas DataFrame中指定列的值时触发了警告,代码及警告信息如下:

代码示例

import pandas as pd
df = pd.DataFrame({"L1_x": [0, 1, 2], 
                   "L1_y": [5, 6, 7], 
                   "other": [11, 12, 3]})
points = ["L1_x", "L1_y"]

# 用这些列的均值替换L1_x和L1_y的值
df[points] = df[points].mean()

触发的警告

:1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use ser.iloc[pos]
df[points] = df[points].mean()

警告原因

这个警告源于Pandas内部的索引处理逻辑:当你将df[points].mean()返回的Series赋值给df[points]时,Pandas底层会尝试将Series的索引(即列名L1_x、L1_y)与DataFrame的列对齐。旧版本中,Series的__getitem__方法允许把整数键当作位置索引处理,但未来版本会统一成和DataFrame一致的规则——整数键始终视为标签。虽然你没有直接使用整数键,但赋值操作的内部流程触发了这个即将被废弃的位置访问逻辑,因此抛出警告。

修复方案

方案1:提取均值数组直接赋值

跳过Series的索引对齐逻辑,直接用数值数组赋值:

df[points] = df[points].mean().values

方案2:用to_numpy()获取数组(官方推荐)

to_numpy()是Pandas官方推荐的获取底层数组的方法,语义更清晰:

df[points] = df[points].mean().to_numpy()

方案3:构造匹配形状的DataFrame赋值

显式生成与原数据行列数匹配的均值DataFrame,明确列对齐:

mean_vals = df[points].mean()
df[points] = pd.DataFrame([mean_vals]*len(df), columns=points)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:56:08