有没有一种简单的方法可以将pickle文件(. pkl)从Pandas Dataframe读入R?一种可能性是导出到CSV并让R读取CSV,但这对我来说似乎真的很麻烦,因为我的 Dataframe 相当大。有没有更简单的方法来做到这一点?谢谢!
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")
pgx2nnw82#
编辑:如果你可以安装和使用{reticulate}包,那么这个答案可能已经过时了。请参阅下面的其他答案以获得更简单的路径。您可以在python中加载pickle,然后通过python包rpy2将其导出到R(或类似的)。一旦你这样做了,你的数据将存在于一个链接到python的R会话中。我猜想你接下来要做的是使用那个会话调用R并将RDS保存到一个文件或RAM磁盘中。然后在RStudio中你可以重新读取那个文件。查看R包rJython和rPython,了解从R触发python命令的方法。或者,您可以编写一个简单的python脚本以在Python中加载数据(可能使用上面提到的R包之一)并将格式化的数据流写入stdout。(包括指定pickle的参数)可以用作R包data.table中fread的参数。或者,如果您希望保留标准函数,您可以使用system(..., intern=TRUE)和read.table的组合。像往常一样,有/许多/方法可以剥这只猫的皮。基本步骤是:1.在python中加载数据1.向R表达数据(例如,通过rpy 2导出对象,或者将格式化文本写入stdout,R准备在另一端接收它)1.将R中表达的数据序列化为内部数据表示(例如,通过rpy 2或fread导出对象)1.(可选)使R的该会话中的数据可由另一个R会话访问(即,使用rpy 2结束循环的步骤,或者如果您一直在使用fread,则已经完成)。
rpy2
rJython
rPython
data.table
fread
system(..., intern=TRUE)
read.table
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"))
hjzp0vay4#
reticulate::py_load_object(filename)
4条答案
按热度按时间i7uq4tfw1#
Reticulate是相当容易和超级顺利所建议的russellpierce在评论。
之后,我根据他们文档中给出的示例创建了一个类似这样的Python脚本。
Python文件:
然后我的R文件看起来像这样:
这给了我之前以pickle格式存储在R中的所有数据。
你也可以在不离开R编辑器的情况下在R中直接完成这些操作(前提是你的系统python可以访问panda)......例如。
pgx2nnw82#
编辑:如果你可以安装和使用{reticulate}包,那么这个答案可能已经过时了。请参阅下面的其他答案以获得更简单的路径。
您可以在python中加载pickle,然后通过python包
rpy2
将其导出到R(或类似的)。一旦你这样做了,你的数据将存在于一个链接到python的R会话中。我猜想你接下来要做的是使用那个会话调用R并将RDS保存到一个文件或RAM磁盘中。然后在RStudio中你可以重新读取那个文件。查看R包rJython
和rPython
,了解从R触发python命令的方法。或者,您可以编写一个简单的python脚本以在Python中加载数据(可能使用上面提到的R包之一)并将格式化的数据流写入stdout。(包括指定pickle的参数)可以用作R包
data.table
中fread
的参数。或者,如果您希望保留标准函数,您可以使用system(..., intern=TRUE)
和read.table
的组合。像往常一样,有/许多/方法可以剥这只猫的皮。基本步骤是:
1.在python中加载数据
1.向R表达数据(例如,通过rpy 2导出对象,或者将格式化文本写入stdout,R准备在另一端接收它)
1.将R中表达的数据序列化为内部数据表示(例如,通过rpy 2或
fread
导出对象)1.(可选)使R的该会话中的数据可由另一个R会话访问(即,使用rpy 2结束循环的步骤,或者如果您一直在使用
fread
,则已经完成)。tvz2xvvm3#
对上述答案补充如下:你可能需要指向一个不同的conda env来访问panda:
hjzp0vay4#
reticulate::py_load_object(filename)