Pandas 2.0中pyarrow double dtype列聚合操作性能低下原因咨询
Pandas中PyArrow Double dtype聚合性能差异解析
测试背景与结果
测试用DataFrame
| Code | Price |
|---|---|
| AA1 | 10 |
| AA1 | 20 |
| BB2 | 30 |
执行的聚合代码
df.groupby("code").aggregate({ "price": "sum" })
不同dtype组合的执行时间(5次取平均)
| Code列dtype | Price列dtype | 执行时间 |
|---|---|---|
| Object | float64 | 2.94 s |
| string[pyarrow] | double[pyarrow] | 49.5 s |
| string[pyarrow] | float64 | 1.11 s |
性能差异的核心原因
- NumPy dtype的成熟优化:Pandas针对NumPy的
float64等原生类型,已经积累了多年的底层优化,核心聚合逻辑多由Cython实现,能直接高效利用NumPy数组的连续内存布局完成向量化计算,几乎没有额外开销。 - PyArrow dtype的适配不足:作为Pandas 2.0新增的类型,PyArrow的
doubledtype目前还未完全适配Pandas groupby聚合的内部优化路径。执行聚合时,需要在PyArrow数组与Pandas内部计算逻辑之间做额外的类型转换或中间层处理,这会带来大量的性能损耗。 - 跨类型组合的协同问题:虽然PyArrow字符串列的groupby已经有一定优化,但搭配PyArrow数值列时,分组后的聚合无法像NumPy dtype那样直接复用高效的向量化操作,只能通过更耗时的逐组处理逻辑完成计算。
- 新特性的迭代空间:PyArrow dtype在Pandas中仍处于完善阶段,这类高频操作的性能问题会在后续版本中逐步得到优化,当前的性能差距属于新特性落地初期的正常现象。
内容的提问来源于stack exchange,提问作者ADEL NAMANI
相关产品推荐
相关产品推荐

