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

遍历pandas Series元素的最佳方法是什么?各常用方式有何区别

Pandas Series 五种遍历方式对比及最优选择

各遍历方式核心差异

  • 方式1:for el in arr 直接迭代
    Series默认的迭代逻辑,直接返回对应位置的Python原生标量值,内部调用__iter__方法实现,不需要额外处理索引,性能中等,会丢失pandas特有的数据类型信息。
  • 方式2:for _, el in arr.iteritems() 迭代
    该方法会成对返回(索引, 元素值)元组,示例中用_忽略了索引才只获取元素值。如果场景需要同时使用索引和对应元素,这是pandas官方推荐的实现方式,比单独获取索引再查询值的效率更高。pandas 2.0+版本中iteritems()和items()方法完全等价,可以互相替换。
  • 方式3:for el in arr.array 迭代
    arr.array返回pandas原生扩展数组(ExtensionArray),完整保留pandas的所有类型特性(比如可空类型、分类类型、字符串类型等特殊dtype),迭代返回的是pandas标量类型,不会做隐式类型转换,适合需要保留pandas数据特性的场景。
  • 方式4:for el in arr.values 迭代
    values属性返回numpy数组,若Series存储的是numpy兼容的基础数据类型,会直接返回对应类型的numpy数组,是所有遍历方式中性能最高的。但如果Series用了pandas特有扩展类型,values可能会做隐式类型转换(比如可空Int64类型转成object类型数组),存在类型污染的风险,官方现在更推荐用arr.to_numpy()替代values,类型转换逻辑更可控。
  • 方式5:下标+iloc迭代
    这是所有方式中最不推荐的实现,每次循环都要调用一次iloc做位置查询,iloc的每次调用都有额外的查找开销,数据量较大时性能会比其他方式低数倍到数十倍,代码可读性也差。

实际应用最优选择

按场景优先级选择即可:

  1. 仅需遍历元素值,不需要保留pandas特殊类型:优先选arr.values或更规范的arr.to_numpy(),性能最高,内存开销最小。
  2. 需要同时获取索引和对应元素值:直接用iteritems()/items(),是官方原生支持的索引值成对返回方案,效率最优。
  3. 需要保留pandas扩展类型特性,避免隐式类型转换:选择arr.array遍历,完全保留pandas原生数据属性。
  4. 任何场景下都不推荐使用下标+iloc的遍历方式。

内容的提问来源于stack exchange,提问作者d.b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:00:03