将.rda转换为pandas数据框

Mat*_*a G 5 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)
Run Code Online (Sandbox Code Playgroud)

其中df2是熊猫数据框。但是,它仅包含.rda文件的标题!我已经来回搜寻了。提出的所有解决方案似乎都没有用。

有谁知道如何有效地将.rda数据框转换为熊猫数据框?

Hoa*_*yen 6

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

pyarrow.lib.ArrowInvalid: Not a Feather V1 or Arrow IPC file
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)


Par*_*ait 5

如前所述,考虑使用 R 将 .rda 文件转换为单独的 .rds 对象mgeteapply构建数据帧的 Python 字典。

RPy2

import os
import pandas as pd

import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri    
from rpy2.robjects.packages import importr

pandas2ri.activate()

base = importr('base')
base.load("datafile.rda")    
rdf_List = base.mget(base.ls())

# ITERATE THROUGH LIST OF R DFs 
pydf_dict = {}

for i,f in enumerate(base.names(rdf_List)):
    pydf_dict[f] = pandas2ri.ri2py_dataframe(rdf_List[i])

for k,v in pydf_dict.items():
    print(v.head())
Run Code Online (Sandbox Code Playgroud)


dsh*_*kol 5

您可以尝试使用作为语言不可知数据框开发的新羽毛库,以便在 R 或 Python 中使用。

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

library(feather)
path <- "your_file_path"
write_feather(datafile, path)
Run Code Online (Sandbox Code Playgroud)

然后在python中安装

$ pip install feather-format
Run Code Online (Sandbox Code Playgroud)

并加载您的数据文件

import feather
path = 'your_file_path'
datafile = feather.read_dataframe(path)
Run Code Online (Sandbox Code Playgroud)