用字典替换 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.replace 慢?
s.replace 比 s.map 进行更广泛的操作。它涉及将字典转换为列表,迭代它,并在执行替换之前检查嵌套字典。
相比之下,s.map 只是检查给定参数是字典还是系列,如果存在则将其转换必要的。它根据索引有效地映射值。
替代选项
在性能至关重要的特定情况下:
结论
用字典替换 Pandas 系列中的值的最佳选择取决于以下因素例如 DataFrame 的大小、字典中唯一值的数量以及映射的完整性。通过仔细考虑这些因素,开发人员可以针对其特定情况选择最有效的方法。
以上是哪种 Pandas 方法优于基于字典的系列值替换?的详细内容。更多信息请关注PHP中文网其他相关文章!