python - 如何将数据帧列表从 R 导出到 Python?

标签 python r dataframe

我目前正在 R 中处理功能性 MRI 数据,但我需要将其导入到 Python 中以进行更快的分析。我怎样才能有效地做到这一点?

我目前在 R 中有一个包含 198135 个数据帧的列表。所有这些都有 5 个变量和 84 个大脑区域之间连接的观察结果。我需要在 Python 中显示相同的 198135 个数据帧,以便在那里运行一些特定的分析(具有与 R 中相同的结构:一个单独包含所有数据帧的对象)。

最初,我尝试从 R 导出 .RDS 文件,然后使用“pyreadr”将其导入 Python,但每次尝试使用“pyreadr.read_r()”函数时,我都会得到空对象。

我的另一种方法是将 R 列表的每个数据帧保存为单独的 .csv 文件,然后将它们导入到 Python 中。这样我就可以得到我想要的东西(我尝试了 100 个数据帧,只是为了尝试代码)。这种方法的问题是效率极低且缓慢。

我找到了类似问题的几个答案,但大多数都是合并所有数据帧并将其作为唯一的.csv加载到Python中,这不是我需要的解决方案。

有没有更有效的方法来完成这个过程,而不改变我提到的数据结构?

感谢您的帮助!

# This is the code in R for an example

a <- as.data.frame(cbind(c(1:3), c(1:3), c(4:6), c(7:9)))
b <- as.data.frame(cbind(c(11:13), c(21:23), c(64:66), c(77:79)))
c <- as.data.frame(cbind(c(31:33), c(61:63), c(34:36), c(57:59)))
d <- as.data.frame(cbind(c(12:14), c(13:15), c(54:56), c(67:69)))
e <- as.data.frame(cbind(c(31:33), c(51:53), c(54:56), c(37:39)))

somelist_of_df <- list(a,b,c,d,e)


saveRDS(somelist_of_df, "somefile.rds") 
## This is the function I used from pyreadr in Python


import pyreadr

results = pyreadr.read_r('/somepath/somefile.rds')


最佳答案

嗯,感谢其他答案的帮助,但这并不完全是我想要的(我只想导出一个包含其中数据帧列表的文件,然后将一个文件加载到Python,保留结构相同)。为了使用feather,你必须分解列表中的所有数据帧,就像保存单独的.csv文件一样,然后将它们中的每一个加载到Python(或R)中。不管怎样,必须说它比使用.csv的方法快得多。

我将成功使用的代码留在单独的答案中,也许对其他人有用,因为我使用了一个简单的循环将数据帧作为列表加载到 Python 中:

## Exporting a list of dataframes from R to .feather files

library(feather) #required package

a <- as.data.frame(cbind(c(1:3), c(1:3), c(4:6), c(7:9))) #Example DFs
b <- as.data.frame(cbind(c(11:13), c(21:23), c(64:66), c(77:79)))
c <- as.data.frame(cbind(c(31:33), c(61:63), c(34:36), c(57:59)))
d <- as.data.frame(cbind(c(12:14), c(13:15), c(54:56), c(67:69)))
e <- as.data.frame(cbind(c(31:33), c(51:53), c(54:56), c(37:39)))

somelist_of_df <- list(a,b,c,d,e) 

## With sapply you loop over the list for creating the .feather files

sapply(seq_along(1:length(somelist_of_df)), 
       function(i) write_feather(somelist_of_df[[i]], 
                                 paste0("/your/directory/","DF",i,".feather")))

(仅使用 MacBook Air,上面的代码只需不到 5 秒即可运行 198135 个 DF 列表)

## Importing .feather files into a list of DFs in Python

import os
import feather

os.chdir('/your/directory')

directory = '/your/directory'

py_list_of_DFs = []

for filename in os.listdir(directory):
    DF = feather.read_dataframe(filename)
    py_list_of_DFs.append(DF)

(这段代码为我完成了工作,除了有点慢,为 198135 个 DF 完成任务花了 12 分钟)

我希望这对某人有用。

关于python - 如何将数据帧列表从 R 导出到 Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55718144/

相关文章:

R ggplot2 : colouring step plot depending on value

python - 将 pandas 数据帧传递给 fastapi

python - 使用另一列的偏移值比较 Pandas 数据框列的值

python - Matplotlib 输出为 PDF 用于 Corel Draw

python - Python lambda 函数是否有助于减少执行时间?

Python检查多个字符串中是否有空字符串

python - 使用极轴在 matplotlib 中进行四重显示

r - 从出生日期列和 r 中的指定时间计算年龄

r - 控制ggplot2图例中的 'alpha'级别

python - 如何删除 python 数据框中最后一个下划线后的字符串?