如何将R的.rdata文件加载到Python中?

时间:2018-08-07 08:29:46

标签: python pandas rpy2

我正在尝试将R代码的一部分转换为Python。在此过程中,我面临一些问题。

我有一个R代码,如下所示。在这里,我将我的R输出保存为 .rdata 格式。

nms <- names(mtcars)
save(nms,file="mtcars_nms.rdata")

现在我必须将mtcars_nms.rdata加载到Python中。 我导入了rpy2模块。然后,我尝试将文件加载到python工作区中。但是看不到实际输出。

我使用以下python代码导入 .rdata

import pandas as pd
from rpy2.robjects import r,pandas2ri
pandas2ri.activate()

robj = r.load('mtcars_nms.rdata')
robj

我的python输出是

R object with classes: ('character',) mapped to:
<StrVector - Python:0x000001A5B9E5A288 / R:0x000001A5B9E91678>
['mtcars_nms']

现在我的目标是从mtcars_nms中提取信息。

在R中,我们可以使用

load("mtcars_nms.rdata");
get('mtcars_nms')

现在我想在Python中做同样的事情。

3 个答案:

答案 0 :(得分:3)

有一个新的python软件包pyreadr,可以非常轻松地将RData和Rds文件导入python:

import pyreadr

result = pyreadr.read_r('mtcars_nms.rdata')

mtcars = result['mtcars_nms']

它不依赖于安装R或其他外部依赖项。 它是C库librdata的包装,因此非常快。

您可以使用pip轻松安装它:

pip install pyreadr

此仓库位于https://github.com/ofajardo/pyreadr

免责声明:我是开发商。

答案 1 :(得分:2)

我不建议使用feather而不是使用.rdata格式,它可以在R和Python之间有效地共享数据。

在R中,您将运行以下命令:

library(feather)
write_feather(nms, "mtcars_nms.feather")

在Python中,要将数据加载到pandas数据框中,然后可以简单地运行:

import pandas as pd
nms = pd.read_feather("mtcars_nms.feather")

答案 2 :(得分:0)

R函数load将返回已加载对象(导入GlobalEnv)的名称的R向量。

您将不得不在rpy2中完成与R中相同的工作:

R:

get('mtcars_nms')

Python / rpy2

robjects.globalenv['mtcars_nms']