将.RData文件加载到Python中

Stu*_*Stu 26 python r rdata

我有一堆.RData时间序列文件,并希望直接将它们加载到Python中,而无需先将文件转换为其他扩展名(例如.csv).有关实现这一目标的最佳方法的任何想法?

Spa*_*man 26

人们在R-help和R-dev列表中询问这类事情,通常的答案是代码是.RData文件格式的文档.所以任何其他语言的任何其他实现都是硬++.

我认为唯一合理的方法是安装RPy2并使用R的load功能,转换为适当的python对象.该.RData文件可以包含结构化对象以及普通表,因此请注意.

Linky:http: //rpy.sourceforge.net/rpy2/doc-2.4/html/

Quicky:

>>> import rpy2.robjects as robjects
>>> robjects.r['load'](".RData")
Run Code Online (Sandbox Code Playgroud)

对象现在加载到R工作区.

>>> robjects.r['y']
<FloatVector - Python:0x24c6560 / R:0xf1f0e0>
[0.763684, 0.086314, 0.617097, ..., 0.443631, 0.281865, 0.839317]
Run Code Online (Sandbox Code Playgroud)

这是一个简单的标量,d是一个数据框,我可以通过子集获取列:

>>> robjects.r['d'][0]
<IntVector - Python:0x24c9248 / R:0xbbc6c0>
[       1,        2,        3, ...,        8,        9,       10]
>>> robjects.r['d'][1]
<FloatVector - Python:0x24c93b0 / R:0xf1f230>
[0.975648, 0.597036, 0.254840, ..., 0.891975, 0.824879, 0.870136]
Run Code Online (Sandbox Code Playgroud)


Ott*_*rdo 20

对于那些不想为了完成此任务而不必安装R(r2py需要它)的人来说,有一个新的包“ pyreadr”,它允许将RData和Rds文件直接读取到python中而没有依赖项。

它是C库librdata的包装,因此速度非常快。

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

pip install pyreadr
Run Code Online (Sandbox Code Playgroud)

例如,您将执行以下操作:

import pyreadr

result = pyreadr.read_r('/path/to/file.RData') # also works for Rds

# done! let's see what we got
# result is a dictionary where keys are the name of objects and the values python
# objects
print(result.keys()) # let's check what objects we got
df1 = result["df1"] # extract the pandas data frame for object df1
Run Code Online (Sandbox Code Playgroud)

仓库在这里:https : //github.com/ofajardo/pyreadr

免责声明:我是此程序包的开发人员。

  • 关键错误:“df1” (2认同)
  • 你好,我在 Python 3.7.6 中遇到了这个问题。我使用``pip install readr``和``conda install -c conda-forge pyreadr``安装。我设法将 RData 作为“OrderedDict”导入到 python 中,但无法访问其中的数据。即使使用基本的 3x2 RData 文件“df.keys()”也会产生“odict_keys([None])”。Python 或 R 中是否有某些更改需要更新,或者我是否遗漏了某些内容。 (2认同)

rsc*_*c05 7

Jupyter笔记本用户

如果您使用的是Jupyter笔记本,则需要执行两个步骤:

第1步:转到http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2并将Python界面下载到R语言(嵌入式R),在我的情况下我将使用rpy2-2.8.6-cp36-cp36m-win_amd64.whl

将此文件放在您当前所在的同一工作目录中.

第2步:转到Jupyter笔记本并编写以下命令

# This is to install rpy2 library in Anaconda
!pip install rpy2-2.8.6-cp36-cp36m-win_amd64.whl
Run Code Online (Sandbox Code Playgroud)

然后

# This is important if you will be using rpy2
import os
os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2'
Run Code Online (Sandbox Code Playgroud)

然后

import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
Run Code Online (Sandbox Code Playgroud)

这应该允许你在python中使用R函数.现在您必须导入readRDS如下

readRDS = robjects.r['readRDS']
df = readRDS('Data1.rds')
df = pandas2ri.ri2py(df)
df.head()
Run Code Online (Sandbox Code Playgroud)

恭喜!现在你拥有了你想要的Dataframe

但是,我建议你将它保存在pickle文件中,以便以后在python中使用

 df.to_pickle('Data1') 
Run Code Online (Sandbox Code Playgroud)

所以下次你可以简单地使用它

df1=pd.read_pickle('Data1')
Run Code Online (Sandbox Code Playgroud)


Mab*_*bus 5

好吧,几年前我和你有同样的问题。我想.RData从我正在开发的库中读取文件。我考虑过使用 RPy2,但这会迫使我使用 GPL 许可证发布我的库,这是我不想做的。

“pyreadr”当时甚至不存在。此外,我想加载的数据集不是标准格式的data.frame.

我来到这个问题并阅读了Spacedman 的回答。特别是,我看到了这条线

所以任何其他语言的任何其他实现都是 hard++。

作为一项挑战,结果在几天内实现了rdata包。这是一个.RData解析器和转换器的非常小的纯 Python 实现,迄今为止能够满足我的需求。解析原始对象和转换为合适的 Python 对象的步骤是分开的,以便用户可以根据需要使用不同的转换。此外,用户可以为自定义 R 类添加构造函数。

这是一个使用示例:

>>> import rdata

>>> parsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")
>>> converted = rdata.conversion.convert(parsed)
>>> converted
{'test_vector': array([1., 2., 3.])}
Run Code Online (Sandbox Code Playgroud)

正如我所说,我开发了这个包并且一直使用没有问题,但我没有费心给它可见性,因为我没有正确记录它。这最近发生了变化,现在文档基本没问题,所以这里适合任何感兴趣的人:

https://github.com/vnmabus/rdata