gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:21:28 25 4
gpt4 key购买 nike

我在 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。这带来了一些问题:

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

有什么办法可以:

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

最佳答案

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

Python 有一个称为“缓冲区接口(interface)”的接口(interface),由 rpy2 使用,它可以最大限度地减少 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com