首页 >后端开发 >Python教程 >为什么 Pandas 系列's.replace”通过字典替换值比's.map”慢?

为什么 Pandas 系列's.replace”通过字典替换值比's.map”慢?

Linda Hamilton
Linda Hamilton原创
2024-11-13 16:21:02181浏览

Why is Pandas series `s.replace` slower than `s.map` for replacing values through dictionaries?

通过字典高效替换 Pandas 系列中的值

经常通过字典替换 Pandas 系列中的值 (s.replace(d))遇到性能瓶颈,使其比列表理解方法慢得多。虽然 s.map(d) 提供了可接受的性能,但它仅适用于在字典键中找到所有系列值的情况。

了解性能差距

主要原因s.replace 缓慢的原因在于其多方面的功能。与 s.map 不同,它处理通常需要更细致处理的边缘情况和罕见情况。

优化策略

要优化性能,请考虑以下准则:

一般情况:

  • 当所有值都可以映射时使用 s.map(d)。
  • 使用 s.map(d)。 fillna(s['A']).astype(int) 当超过 5% 的值可以被映射时。

字典中的几个值:

  • 当字典中存在的值少于 5% 时,使用 s.replace(d)。

基准测试结果

广泛的测试证实性能差异:

完整地图:

  • s.replace:1.98秒
  • s.map:84.3毫秒
  • 列表理解:134 毫秒

部分映射:

  • s.replace:20.1 毫秒
  • s.map。 fillna.astype: 111 毫秒
  • 列表理解: 243 毫秒

解释

s.replace 的缓慢源于其复杂的内部建筑学。它涉及:

  • 将字典转换为列表
  • 迭代列表并检查嵌套字典
  • 将键和值的迭代器传递给替换函数

相比之下,s.map 的代码明显精简,性能更优越。

以上是为什么 Pandas 系列's.replace”通过字典替换值比's.map”慢?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn