datatable:为大数据处理而生的 Python 数据框架
datatable 在 GitHub 上已经拿到 1,878 个 Star 了。
h2o.ai 开源了这个 Python 包,专攻在数据量较大的场景下高效处理二维表格数据。它和 pandas 功能上有重叠,但核心设计从一开始就锁定了速度和内存效率,面向的是 GB 级甚至上百 GB 的数据集。它的灵感来自 R 语言生态中的 data.table,可以理解为 data.table 在 Python 世界的移植。
1、 解决什么问题
做过特征工程的人都经历过:数据量一上到几十 GB,pandas 开始吃力,内存暴涨,操作越来越慢,甚至直接崩掉。传统工具在处理大规模表格数据时,瓶颈往往不在算法,而在数据加载和内存管理上。你花了大量时间等数据加载、等分组聚合跑完,真正用在建模上的时间反而被挤占了。
datatable 2017 年启动,目标很直接:在一台机器上处理 100GB 以内的数据,而且要尽可能快。它第一个服务的是 H2O 旗下的 Driverless.ai,一个自动化机器学习平台。这个工具从诞生之初就有真实的大数据场景在驱动,不是实验室里的空想。
2、 核心技术思路
列式存储是基础。所有数据类型都用原生 C 实现,包括字符串。pandas 和 numpy 对数值列做到了这一点,但字符串列还是 Python 对象,性能差距明显。datatable 把字符串也拉到了同样的水平。
除了数值和字符串,它还完整支持日期时间、分类数据等类型。对象类型也能用,但不推荐,框架会尽量引导用户使用更高效的类型。空值处理上,所有类型都支持 null,内存开销控制在最低。
存储格式方面,数据在磁盘和内存中用同一布局。文件可以直接内存映射,处理时只加载需要的部分,不需要把整个数据集塞进内存。这在处理远超物理内存的数据集时格外有用。
多线程并行是默认行为。排序、分组、连接这类耗时操作会自动利用所有 CPU 核心,不需要手动配置线程数。数据读取方面,对 CSV 格式有专门优化,解析速度很快,能有效缩短数据导入的等待时间。
还有一个关键设计:Copy-on-Write 语义。数据在过滤、排序、分组时尽量减少复制,通过 RowIndex 视图避免不必要的内存分配。多步操作链下来,内存占用比同类工具低不少。
查询语法借鉴了 R 语言 data.table 的风格,用方括号和行筛选表达式操作数据,简洁直接。同时它与 pandas、numpy、pyarrow 等生态工具都能互相转换,不会把人锁死在一个框架里。
3、 安装和上手
安装只需要一行:
pip install datatable
支持 macOS、Linux、Windows 的 64 位系统,Python 3.6 以上即可。其他平台需要从源码构建。项目在 Travis CI 上持续集成,文档托管在 Read the Docs 上,官方提供了详细的构建说明和使用指南,上手门槛不高。
4、 适合哪些人
- 做特征工程时被内存问题卡住的机器学习工程师
- 需要在单机上处理 GB 级表格数据的分析人员
- 想找比 pandas 更快的数据处理方案、又不想换语言的 Python 开发者
datatable 不做大而全,它在数据处理速度和大文件支持这个方向上做得很深。如果你的日常工作被大表格拖慢过,值得试一试。