首页  >  文章  >  后端开发  >  为什么使用字典替换 Pandas 系列中的值很慢,如何提高性能?

为什么使用字典替换 Pandas 系列中的值很慢,如何提高性能?

Susan Sarandon
Susan Sarandon原创
2024-11-13 05:46:02654浏览

Why is Using Dictionaries to Replace Values in Pandas Series Slow, and How Can You Improve Performance?

使用字典提高 Pandas 系列中值替换的性能

使用字典替换 Pandas 系列中的值是一项常见任务。虽然建议使用 s.replace(d) 替换值,但它可能比使用简单的列表理解要慢得多。

性能缓慢的原因

性能缓慢s.replace(d) 的作用源于它对边缘情况和罕见情况的处理。它涉及:

  • 将字典转换为列表。
  • 迭代列表并检查嵌套字典。
  • 将键和值的迭代器输入到替换功能。

替代方法

要提高性能,请考虑使用以下方法:

  • 完整地图:如果所有值都在系列由字典映射。此方法高效且始终更快。
  • 部分映射:如果字典仅映射一小部分(例如,小于 5%)值,请使用 s.map(d ).fillna(s['A']).astype(int).这种方法将映射与填充相结合,避免了昂贵的迭代。

基准测试

基准测试展示了 s.replace(d), s 之间的性能差异.map(d) 和列表理解:

##### Full Map #####

d = {i: i+1 for i in range(1000)}

%timeit df['A'].replace(d)                          # Slow (1.98s)
%timeit df['A'].map(d)                              # Fast (84.3ms)

##### Partial Map #####

d = {i: i+1 for i in range(10)}

%timeit df['A'].replace(d)                          # Intermediate (20.1ms)
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # Faster (111ms)

这表明对于完整或部分映射,s.map(d) 始终比 s.replace(d) 更快。

结论

取决于字典覆盖的完整性, s.map(d) 或 s.map(d).fillna(s['A']).astype(int) 应该优先于s.replace(d) 用于 Pandas 系列中的高效值替换。

以上是为什么使用字典替换 Pandas 系列中的值很慢,如何提高性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

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