*高效*使用RPy(或其他方式)将数据帧从Pandas移动到R

2024-03-28 11:59:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pandas中有一个数据帧,我想用R函数对它做一些统计。没问题!RPy使得将数据帧从Pandas发送到R:

import pandas as pd
df = pd.DataFrame(index=range(100000),columns=range(100))
from rpy2 import robjects as ro
ro.globalenv['df'] = df

如果我们在IPython:

^{pr2}$

由于某些原因,ro.globalenv路由比rmagic路由稍慢,但是没有关系。重要的是:我最终要使用的数据帧是~100GB。这带来了一些问题:

  1. 即使只有1GB的数据,传输也相当缓慢。在
  2. 如果我理解正确,这将在内存中创建两个dataframe副本:一个在Python中,一个在R中。这意味着我的内存需求将增加一倍,而且我甚至还没有开始运行统计测试!在

有没有办法:

  1. 在Python和R之间更快地传输大数据帧?在
  2. 访问内存中的同一对象?我怀疑这是在问月亮。在

Tags: 数据函数内存import路由dataframepandasdf
2条回答

目前,^{}似乎是R和pandas之间数据交换的最有效的选择。在

rpy2正在使用一种转换机制,该机制试图避免在Python和R之间移动时复制对象。但是,这目前只在R->;Python方向上起作用。在

Python有一个名为“buffer interface”的接口,rpy2使用这个接口,它可以最小化R和Python之间C级兼容的副本数量(请参见http://rpy.sourceforge.net/rpy2/doc-2.5/html/numpy.html#from-rpy2-to-numpy-文档似乎过时了,因为__array_struct__接口不再是主要选择)。在

在R中没有与缓冲区接口等效的接口,当前阻碍我在rpy2中提供等效功能的问题是垃圾收集期间对借用引用的处理(以及缺乏足够的时间仔细考虑)。在

总而言之,有一种方法可以在Python和R之间共享数据,而不需要复制,但这需要在R中创建数据

相关问题 更多 >