将.RData文件加载到Python中

mf98qq94  于 2023-04-03  发布在  Python
关注(0)|答案(7)|浏览(260)

我有一堆.RData时间序列文件,想直接将它们加载到Python中,而不先将文件转换为其他扩展名(如.csv)。有什么最好的方法吗?

czfnxgou

czfnxgou1#

对于那些不想安装R来完成这个任务的人来说,有一个新的包“pyreadr”,它允许阅读RData和Rds文件直接读取到python中,而不需要依赖。
它是C库librdata的 Package 器,因此速度非常快。
你可以通过pip轻松安装它:

pip install pyreadr

举个例子,你可以这样做:

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

回购协议在这里:https://github.com/ofajardo/pyreadr
免责声明:我是这个软件包的开发者。

h7wcgrx3

h7wcgrx32#

人们在R-help和R-dev列表中询问这类事情,通常的答案是代码是.RData文件格式的文档。所以任何其他语言的任何其他实现都是hard++
我认为唯一合理的方法是安装RPy 2并使用R的load函数,在您使用时转换为适当的python对象。.RData文件可以包含结构化对象以及普通表,所以要小心。
友情链接:http://rpy.sourceforge.net/rpy2/doc-2.4/html/
快:

>>> import rpy2.robjects as robjects
>>> robjects.r['load'](".RData")

对象现在被加载到R工作区中。

>>> robjects.r['y']
<FloatVector - Python:0x24c6560 / R:0xf1f0e0>
[0.763684, 0.086314, 0.617097, ..., 0.443631, 0.281865, 0.839317]

这是一个简单的标量,d是一个 Dataframe ,我可以子集得到列:

>>> 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]
clj7thdc

clj7thdc3#

Jupyter Notebook用户

如果你使用的是Jupyter notebook,你需要做两个步骤:
第1步:转到http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2并下载Python接口到R语言(嵌入式R)在我的情况下,我将使用rpy2-2.8.6-cp36-cp36m-win_amd64.whl
将此文件放在您当前所在的工作目录中。
第2步:转到Jupyter notebook并编写以下命令

# This is to install rpy2 library in Anaconda
!pip install rpy2-2.8.6-cp36-cp36m-win_amd64.whl

然后

# This is important if you will be using rpy2
import os
os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2'

然后

import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()

这应该允许你在python中使用R函数。

readRDS = robjects.r['readRDS']
df = readRDS('Data1.rds')
df = pandas2ri.ri2py(df)
df.head()

恭喜!现在你有你想要的数据框架
但是,我建议您将其保存在pickle文件中,以便以后在python中使用

df.to_pickle('Data1')

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

df1=pd.read_pickle('Data1')
uwopmtnx

uwopmtnx4#

几年前,我也遇到过和你一样的问题。我想从我正在开发的库中读取.RData文件。我考虑过使用RPy2,但那会迫使我用GPL许可证发布我的库,我不想这样做。
“pyreadr”当时甚至还不存在。而且,我想要加载的数据集也不是标准化格式的data.frame
我来到这个问题并阅读了Spacedman answer。特别是,我看到了
因此,任何其他语言的任何其他实现都是困难的++。
作为一个挑战,并在几天内实现了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.])}

正如我所说的,我开发了这个包,并一直使用以来没有问题,但我没有麻烦给予它的可见性,因为我没有正确地记录它。这是最近发生了变化,现在的文档大多是好的,所以这里是给任何感兴趣的人:
https://github.com/vnmabus/rdata

njthzxwz

njthzxwz5#

有一个第三方库叫做rpy,你可以使用这个库来加载.RData文件,你可以通过pip安装pip instally rpy就可以了,如果你没有rpy,那么我建议你看看如何安装它,否则,你可以简单的做:

from rpy import *
r.load("file name here")

编辑:

看起来我有点老派了,现在是rpy2,所以你可以用它。

inb24sb2

inb24sb26#

@rsc05的回答迎合了笔记本用户对我的工作,但显然其中一个函数[df = pandas2ri.ri2py(df)]已被弃用,现在应该是df = pandas2ri.rpy2py(df)
因此,完整的解决方案应该如下所示:

# import the libraries
>> import rpy2.robjects as robjects
>> from rpy2.robjects import pandas2ri

#activate
>> pandas2ri.activate()

# create readRDS object
>> readRDS = robjects.r['readRDS']

# read .rds using readRDS object
>> df = readRDS('sri_testing_data.rds')

# convert the data into native dataframe object 
>> df = pandas2ri.rpy2py(df)

#print the dataframe
>> df.head()
kqlmhetl

kqlmhetl7#

试试这个

!pip install pyreadr

然后
一个一个一个一个一个x一个一个二个一个x一个一个三个一个x一个一个x一个四个一个
成交!

相关问题