在R中读取pickle文件(PANDAS Python Data Frame)

Vin*_*ent 20 python r dataframe pandas

有没有一种简单的方法可以将Pandas Dataframe中的pickle文件(.pkl)读入R?

一种可能性是导出到CSV并让R读取CSV,但这对我来说似乎非常麻烦,因为我的数据帧相当大.有更简单的方法吗?

谢谢!

Ank*_*nha 18

正如russellpierce在评论中所建议的那样,网状结构非常简单且非常流畅.

install.packages('reticulate')
Run Code Online (Sandbox Code Playgroud)

之后,我从他们的文档中给出的示例创建了这样的Python脚本.

Python文件:

import pandas as pd

def read_pickle_file(file):
    pickle_data = pd.read_pickle(file)
    return pickle_data
Run Code Online (Sandbox Code Playgroud)

然后我的R文件看起来像:

require("reticulate")

source_python("pickle_reader.py")
pickle_data <- read_pickle_file("C:/tsa/dataset.pickle")
Run Code Online (Sandbox Code Playgroud)

这给了我早先以pickle格式存储的所有R数据.

  • 你可以这样做... ``` library(reticulate) pd &lt;- import("pandas") pickle_data &lt;- pd$read_pickle("dataset.pickle") ``` (4认同)

rus*_*rce 7

你可以在python中加载pickle,然后通过python包rpy2(或类似的)将它导出到R. 完成后,您的数据将存在于链接到python的R会话中.我怀疑你接下来要做的就是使用该会话来调用R并将saveRDS调用到文件或RAM磁盘.然后在RStudio中你可以重新读取该文件.查看R包rJython以及rPython从R触发python命令的方法.

或者,您可以编写一个简单的python脚本来加载Python中的数据(可能使用上面提到的R包之一)并将格式化的数据流写入stdout.然后整个系统调用脚本(包括指定你的pickle的参数)可以用作freadR包中的参数data.table.或者,如果您想保持标准功能,可以使用system(..., intern=TRUE)和的组合read.table.

像往常一样,有很多/很多方法可以给这只特别的猫上皮.基本步骤是:

  1. 在python中加载数据
  2. 将数据表示为R(例如,通过rpy2导出对象或将格式化文本写入stdout,R准备好在另一端接收它)
  3. 将R中表达的数据序列化为内部数据表示(例如,通过rpy2导出对象或fread)
  4. (可选)使R会话中的数据可以访问另一个R会话(即,使用rpy2关闭循环的步骤,或者如果您一直在使用,fread那么您已经完成了).

  • 带有 {reticulate} 的 Ps 可以更轻松地完全从 R 端进行管理......并且在 RStudio 中工作得特别好。 (2认同)

gen*_*ser 6

要添加到上面的答案:您可能需要指向不同的 conda env 才能访问 pandas:

use_condaenv("name_of_conda_env", conda = "<<result_of `which conda`>>")
pd <- import('pandas')

df <- pd$read_pickle(paste0(outdir, "df.pkl"))
Run Code Online (Sandbox Code Playgroud)