将.rda转换为pandas数据帧

时间:2017-12-15 13:48:01

标签: python r rpy2

我有一些我需要使用Python访问的.rda文件。 我的代码如下所示:

import rpy2.robjects as robjects
from rpy2.robjects import r, pandas2ri

pandas2ri.activate()
df = robjects.r.load("datafile.rda")
df2 = pandas2ri.ri2py_dataframe(df)

其中 df2 是一个pandas数据帧。但是,它只包含.rda文件的标题!我来回搜索。提出的解决方案似乎都没有起作用。

有没有人知道如何有效地将.rda数据帧转换为pandas数据帧?

3 个答案:

答案 0 :(得分:4)

您可以尝试使用作为语言无关数据框开发的新feather library在R或Python中使用。

# Install feather
devtools::install_github("wesm/feather/R")

library(feather)
path <- "your_file_path"
write_feather(datafile, path)

然后在python中安装

$ pip install feather-format

加载数据文件

import feather
path = 'your_file_path'
datafile = feather.read_dataframe(path)

答案 1 :(得分:3)

感谢您的有用问题。我尝试了上面提出的两种方法来解决我的问题。 对于feather,我遇到了这个问题:

pyarrow.lib.ArrowInvalid: Not a Feather V1 or Arrow IPC file

对于rpy2,如@Orange所述:“ pandas2ri.ri2py_dataframe在rpy2 3.0.3版中似乎不再存在”或更高版本。

我搜索了另一个解决方法,发现pyreadr对我有用,也许对那些面临与我同样的问题的人也有用:https://github.com/ofajardo/pyreadr

用法https://gist.github.com/LeiG/8094753a6cc7907c716f#gistcomment-2795790

pip install pyreadr
import pyreadr

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

# 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

答案 2 :(得分:2)

如上所述,请考虑使用R {'1}}或mget将.rda文件转换为单独的.rds对象,以构建数据帧的Python字典。

<强> RPy2

eapply