在R中阅读pickle文件(PANDAS Python数据框)

u3r8eeie  于 2023-03-05  发布在  Python
关注(0)|答案(4)|浏览(209)

有没有一种简单的方法可以将pickle文件(. pkl)从Pandas Dataframe读入R?
一种可能性是导出到CSV并让R读取CSV,但这对我来说似乎真的很麻烦,因为我的 Dataframe 相当大。有没有更简单的方法来做到这一点?
谢谢!

i7uq4tfw

i7uq4tfw1#

Reticulate是相当容易和超级顺利所建议的russellpierce在评论。

install.packages('reticulate')

之后,我根据他们文档中给出的示例创建了一个类似这样的Python脚本。
Python文件:

import pandas as pd

def read_pickle_file(file):
    pickle_data = pd.read_pickle(file)
    return pickle_data

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

require("reticulate")

source_python("pickle_reader.py")
pickle_data <- read_pickle_file("C:/tsa/dataset.pickle")

这给了我之前以pickle格式存储在R中的所有数据。
你也可以在不离开R编辑器的情况下在R中直接完成这些操作(前提是你的系统python可以访问panda)......例如。

library(reticulate)
pd <- import("pandas")
pickle_data <- pd$read_pickle("dataset.pickle")
pgx2nnw8

pgx2nnw82#

编辑:如果你可以安装和使用{reticulate}包,那么这个答案可能已经过时了。请参阅下面的其他答案以获得更简单的路径。
您可以在python中加载pickle,然后通过python包rpy2将其导出到R(或类似的)。一旦你这样做了,你的数据将存在于一个链接到python的R会话中。我猜想你接下来要做的是使用那个会话调用R并将RDS保存到一个文件或RAM磁盘中。然后在RStudio中你可以重新读取那个文件。查看R包rJythonrPython,了解从R触发python命令的方法。
或者,您可以编写一个简单的python脚本以在Python中加载数据(可能使用上面提到的R包之一)并将格式化的数据流写入stdout。(包括指定pickle的参数)可以用作R包data.tablefread的参数。或者,如果您希望保留标准函数,您可以使用system(..., intern=TRUE)read.table的组合。
像往常一样,有/许多/方法可以剥这只猫的皮。基本步骤是:
1.在python中加载数据
1.向R表达数据(例如,通过rpy 2导出对象,或者将格式化文本写入stdout,R准备在另一端接收它)
1.将R中表达的数据序列化为内部数据表示(例如,通过rpy 2或fread导出对象)
1.(可选)使R的该会话中的数据可由另一个R会话访问(即,使用rpy 2结束循环的步骤,或者如果您一直在使用fread,则已经完成)。

tvz2xvvm

tvz2xvvm3#

对上述答案补充如下:你可能需要指向一个不同的conda env来访问panda:

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

df <- pd$read_pickle(paste0(outdir, "df.pkl"))

相关问题