为什么2012年python中的pandas合并比R中的data.table合并要快?

我最近偶然发现了用于python的pandas库,根据这个基准测试,它执行非常快的内存合并。它甚至比R(我选择的分析语言)中的data.table包还要快

为什么pandasdata.table快得多?这是因为python与R相比具有固有的速度优势,还是有一些我不知道的折衷?是否有一种方法可以在数据表中执行内部和外部联接,而无需诉诸合并(X,Y,all=FALSE)合并(X,Y,all=TRUE)

下面是用于对各种包进行基准测试的R代码和Python代码

pandas之所以更快,是因为我提出了一个更好的算法,它是使用快速哈希表实现(klib)和C/Cython非常小心地实现的,以避免不可向量化部分的Python解释器开销。该算法在我的演示文稿中有一些详细描述:熊猫设计与开发内部介绍

data.table的比较实际上有点有趣,因为R的data.table的整个要点是它包含了预计算的索引,用于各种列,以加速数据选择和合并等操作。在这种情况下(数据库连接),熊猫的数据帧不包含用于合并的预先计算的信息,可以说是“冷”合并。如果我存储了连接键的分解版本,那么连接速度会明显加快,因为分解是该算法的最大瓶颈

我还应该补充一点,pandas的DataFrame的内部设计比R的data.frame(内部只是一个数组列表)更适合这些类型的操作

发表评论