首页 >后端开发 >Python教程 >哪种 Pandas 方法优于基于字典的系列值替换?

哪种 Pandas 方法优于基于字典的系列值替换?

Patricia Arquette
Patricia Arquette原创
2024-11-15 20:01:02985浏览

Which Pandas Method Outperforms for Dictionary-Based Value Replacement in Series?

用字典替换 Pandas 系列中的值的性能注意事项

用字典替换 Pandas 系列中的值一直是一个持续关注的问题社区。虽然推荐的方法是 s.replace(d) 或 s.map(d),但性能可能会根据数据集的特征而有很大差异。

基准测试

为了说明性能差异,让我们考虑一个包含 0 到 999 之间的随机整数的 DataFrame df。

import pandas as pd, numpy as np

df = pd.DataFrame({'A': np.random.randint(0, 1000, 1000000)})

一般情况

如果我们创建一个字典 d 将值映射到他们的后继者(例如,d = {i: i 1 for i in range(1000)}),我们观察到:

# Full-range dictionary
%timeit df['A'].replace(d)  # 1.98s
%timeit df['A'].map(d)  # 84.3ms

# Partial-range dictionary
d = {i: i+1 for i in range(10)}
%timeit df['A'].replace(d)  # 20.1ms
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # 111ms

最优方法选择

基于在基准测试中,很明显 s.map 在这两种情况下都表现出色:

  • 完整地图:使用 s.map(d) 实现完整覆盖。
  • 部分地图(例如, 使用 s.map(d).fillna(s['A']).astype(int) 填充任何缺失的值。

为什么 s.replace 慢?

s.replace 比 s.map 进行更广泛的操作。它涉及将字典转换为列表,迭代它,并在执行替换之前检查嵌套字典。

相比之下,s.map 只是检查给定参数是字典还是系列,如果存在则将其转换必要的。它根据索引有效地映射值。

替代选项

在性能至关重要的特定情况下:

  • 列表理解: 使用列表理解执行替换操作可能比 s.map 稍快。
  • s.apply(pd.to_numeric): 此方法可以显着提高性能用缺失或非数字数据替换值时。

结论

用字典替换 Pandas 系列中的值的最佳选择取决于以下因素例如 DataFrame 的大小、字典中唯一值的数量以及映射的完整性。通过仔细考虑这些因素,开发人员可以针对其特定情况选择最有效的方法。

以上是哪种 Pandas 方法优于基于字典的系列值替换?的详细内容。更多信息请关注PHP中文网其他相关文章!

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