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

Pandas v2.1.0+中Series.__getitem__弃用警告的正确写法咨询

Pandas v2.1.0+ 中apply位置索引警告的解决方法

我在使用Pandas v2.1.0+ 版本时遇到问题:需要用自定义函数转换数据框中的一组列,由于新值依赖多列数据,我用apply原地转换列,原代码如下:

my_columns_to_convert = ['col1','col2','col3']

for k in my_columns_to_convert:
  df[k] = df[[k, colx]].apply(lambda x: convert_my_data(value_1_in=x[0], value_2_in=x[1]), axis=1)

这段代码在旧版Pandas中运行正常,但现在出现如下警告:

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]


问题原因

警告的核心是:apply的lambda函数中,x是Series对象,用x[0]、x[1]按位置取值的方式在新版Pandas中被标记为废弃。未来版本中,整数索引会被当作列标签而非位置,因此必须明确指定按位置访问。

修正后的代码

直接在lambda里用iloc来按位置获取Series中的值:

my_columns_to_convert = ['col1','col2','col3']

for k in my_columns_to_convert:
  df[k] = df[[k, colx]].apply(lambda x: convert_my_data(value_1_in=x.iloc[0], value_2_in=x.iloc[1]), axis=1)

更优的替代方案

apply本质是逐行循环,性能较低。如果你的convert_my_data支持向量化输入(比如用numpy操作替代逐元素处理),可以直接传入整列数据,完全避开apply:

my_columns_to_convert = ['col1','col2','col3']

for k in my_columns_to_convert:
  df[k] = convert_my_data(value_1_in=df[k], value_2_in=df[colx])

这种方式不仅消除了警告,还能大幅提升大数据集的处理速度。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:22:13