我在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中:
%load_ext rmagic
%R -i df
出于某种原因,
ro.globalenv
路由比rmagic
路由稍慢,但是没关系。重要的是:我最终将使用的数据帧约为100GB。这带来了一些问题:有什么办法可以:
最佳答案
rpy2
正在使用一种转换机制,该机制试图避免在Python和R之间移动时复制对象。但是,当前仅在R-> Python方向上有效。
Python的rpy2
使用了一个称为“缓冲区接口(interface)”的接口(interface),该接口(interface)使R和Python之间的C级兼容的副本数减至最少(请参阅http://rpy.sourceforge.net/rpy2/doc-2.5/html/numpy.html#from-rpy2-to-numpy-该文档似乎已过时,因为__array_struct__
接口(interface)已不再主要选择)。
R中没有等效的缓冲区接口(interface),而目前困扰我而无法在rpy2
中提供等效功能的原因是,在垃圾回收期间处理借用的引用(并且缺乏足够的时间对其进行仔细地思考)。
因此,总而言之,有一种方法可以在Python和R之间共享数据而不进行复制,但这需要在R中创建数据。
关于python - 使用RPy(或其他方式)*高效**将数据帧从 Pandas 移动到R,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30011910/