You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Pandas中Arrow dtype支持及原生可空dtype的技术问询

Pandas三种dtype后端的疑问与分析

当前Pandas支持三种dtype后端:numpy、原生可空(扩展)dtype和pyarrow dtype。已知Arrow最终会取代numpy成为Pandas的默认后端,这是一个长期推进的目标。

我一直困惑:既然Arrow dtype和原生可空dtype一样支持空值,功能高度重叠,为什么当初要开发原生可空dtype(比如Int32)?难道是因为早年Arrow的支持还不成熟,才推出的过渡方案?

实测数据对比

我做了一组简单的性能和内存测试,结果如下:

性能测试

测试代码:

import pandas as pd
import numpy as np

s_arrow = pd.Series(range(1_000_000), dtype='int32[pyarrow]')
s_extended = pd.Series(range(1_000_000), dtype='Int32')
s_numpy = pd.Series(range(1_000_000), dtype=np.int32)

%timeit s_arrow**2
%timeit s_extended**2
%timeit s_numpy**2

执行结果:

10.6 ms ± 382 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) # pyarrow int32
3.9 ms ± 340 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) # 原生Int32
1e+03 µs ± 69.2 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each) # numpy int32

内存占用测试

测试代码:

s_arrow.memory_usage(deep=True), s_extended.memory_usage(deep=True), s_numpy.memory_usage(deep=True)

输出结果:

(4000128, 5000128, 4000128)

可以看到,原生扩展dtype的内存占用明显高于pyarrow和numpy dtype。

疑问解答

1. 是否有书面计划或路线图来提升Pandas中原生扩展dtype和Arrow dtype的性能?

Pandas官方有明确的性能优化路线:

  • 针对Arrow dtype的优化是当前核心重点之一,毕竟它是未来默认后端的方向,团队一直在推进Arrow相关功能的性能对齐甚至超越numpy;
  • 对于原生扩展dtype,目前优化优先级较低,更多是维持现有兼容性,不会投入大量资源做突破性提升,因为长期来看会逐步被Arrow dtype替代。

2. 在需要可空dtype的生产代码中,当前是否有理由选择Arrow dtype而非原生可空dtype?

有不少场景值得优先选择Arrow dtype:

  • 内存效率更高:实测显示Arrow dtype的内存占用和numpy一致,远低于原生扩展dtype,大数据量场景下能节省不少内存;
  • 跨生态兼容性好:Arrow是跨语言的标准数据格式,和Polars、Spark、Flink等工具交互时无需额外转换,数据流转更顺畅;
  • 未来迁移成本低:既然Pandas长期计划切换到Arrow后端,提前使用Arrow dtype能减少后续代码迁移的工作量;
  • 类型覆盖更全面:Arrow dtype支持更多复杂类型(比如高精度时间戳、Decimal等)的空值处理,原生扩展dtype的类型支持范围相对有限。

当然,如果你的代码严重依赖原生扩展dtype的特定API,或者当前环境Arrow支持不完善,暂时保留原生类型也没问题,但从长期来看,Arrow dtype是更优的选择。

内容的提问来源于stack exchange,提问作者user3022222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 09:13:21