jef*_*ott 9 python r dataframe rpy2
我在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
Run Code Online (Sandbox Code Playgroud)
如果我们在IPython:
%load_ext rmagic
%R -i df
Run Code Online (Sandbox Code Playgroud)
由于某种原因,ro.globalenv路线比rmagic路线稍慢,但无论如何.重要的是:我最终将使用的数据帧是~100GB.这提出了一些问题:
有没有办法:
rpy2 正在使用一种转换机制,试图避免在Python和R之间移动时复制对象.但是,目前这只是在R - > Python的方向上工作.
Python有一个名为"缓冲区接口"的接口rpy2,它可以让它最小化R和Python之间兼容的C级副本的数量(参见http://rpy.sourceforge.net/rpy2/doc-2.5) /html/numpy.html#from-rpy2-to-numpy - 由于__array_struct__界面不再是主要选择,因此doc似乎过时了.
R中没有与缓冲区接口等效的东西,当前关注的是阻止我提供相同的功能,rpy2即在垃圾收集过程中处理借用的引用(并且没有足够时间仔细思考它).
总而言之,有一种方法可以在不复制的情况下在Python和R之间共享数据,但这需要在R中创建数据.