为什么Panda在python中比data.table合并更快?

问题:

我最近遇到了pandas的python库,根据this benchmark执行内存上的快速合并。它比R中的data.table包(我的语言选择用于分析)要快。
为什么pandasdata.table快得多?是因为python有超过R的固有速度优势,还是有一些权衡我不知道?有没有办法在data.table中执行内部和外部联接,而不诉诸merge(X, Y, all=FALSE)merge(X, Y, all=TRUE)
 Comparison
以下是R codePython code用于对各种软件包进行基准测试。

回答:

当唯一字符串(levels)的数量很大时,Wes可能会在data.table中发现一个已知的问题:10,000。
Rprof()是否显示了大部分在通话中花费的时间sortedmatch(levels(i[[lc]]), levels(x[[rc]])?这不是真正的加入本身(算法),而是一个初步的步骤。
最近的努力已经开始允许键中的字符列,这应该通过与R自己的全局字符串哈希表更紧密地集成来解决这个问题。某些基准测试结果已经由test.data.table()报告,但该代码未被挂起,尚未将级别替换为级别匹配。
大熊猫的合并速度比正常整数列的data.table快吗?这应该是一种隔离算法本身与因素问题的方法。
此外,data.tabletime series merge。两个方面:i)多列ordered键,如(id,datetime)ii)快速连接(roll=TRUE)a.k.a.最后一个观察结束。
我需要一些时间来确认,因为这是我第一次看到与data.table的比较。
 从2012年7月发布的data.table v1.8.0更新

  • 内部函数sortedmatch()被删除并替换为chmatch()
           当将i级别与x级别匹配“factor”类型的列时。这个
           初步的步骤是导致(已知)数量显着减慢
           因子柱的水平很大(例如> 10,000)。加剧了
           如Wes McKinney所示,加入四个这样的列的测试
           (Python包Pandas的作者)。匹配其中100万串
           其中60万是独一无二的,现在从16s减为0.5s。

那个版本也是:

  • 字符列现在允许在键中,并且是优选的
    因子。 data.table()和setkey()不再强制字符到
    因子。因素仍然得到支持。实施FR#1493,FR#1224
    和(部分)FR#951。
  • 新功能chmatch()和%chin%,更快版本的match()
    和字符向量的%%。 R的内部字符串缓存是
    利用(没有建立哈希表)。他们的速度大约快4倍
    比匹配()在?chmatch中的示例。

截至2013年9月,data.table是CRAN上的v1.8.10,我们正在开发v1.9.0。 已实时更新。
但正如我以前写的:

 data.tabletime series merge。两个方面:i)多列ordered键,如(id,datetime)ii)快速连接(roll=TRUE)a.k.a.最后一个观察结束。

所以熊猫Equi加入两个字符列可能还要比data.table快。因为它听起来像是混合了两列。 data.table不会哈希的关键,因为它有主流的订购连接。 data.table中的“key”字面上只是排序顺序(类似于SQL中的聚集索引,即数据是如何在RAM中排序的)。列表中添加辅助键,例如。
总而言之,由具有超过10,000个独特字符串的特定双字符列测试突出显示的显着速度差异现在不应该如此,因为已知问题已被修复。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why are pandas merges in python faster than data.table merges in R?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

8 + 1 =