有没有一种简单的方法可以将泡菜文件(.pkl(从Pandas Dataframe读取到R中?
一种可能性是导出到 CSV 并让 R 读取 CSV,但这对我来说似乎真的很麻烦,因为我的数据帧相当大。有没有更简单的方法可以做到这一点?
谢谢!
正如Russellpierce在评论中建议的那样,Reticulate非常简单且超级流畅。
install.packages('reticulate')
之后,我根据文档中给出的示例创建了一个这样的 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")
这给了我之前以泡菜格式存储在 R 中的所有数据。
你也可以在 R 中内联完成这一切,而无需离开你的 R 编辑器(前提是你的系统 python 可以到达熊猫(......例如
library(reticulate)
pd <- import("pandas")
pickle_data <- pd$read_pickle("dataset.pickle")
编辑:如果你可以安装和使用{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
的组合。
像往常一样,有/很多/方法可以给这只特殊的猫剥皮。 基本步骤是:
- 在python中加载数据
- 将数据表达给 R(例如,通过 rpy2 导出对象或将格式化文本写入 stdout,R 准备在另一端接收它(
- 将 R 中的表达式数据序列化为内部数据表示(例如,通过 rpy2 或
fread
导出对象( - (可选(使 R 会话中的数据可供另一个 R 会话访问(即,使用 rpy2 关闭循环的步骤,或者如果您一直在使用
fread
那么您已经完成了(。
补充上面的答案:您可能需要指向不同的Conda Env才能到达熊猫:
use_condaenv("name_of_conda_env", conda = "<<result_of `which conda`>>")
pd <- import('pandas')
df <- pd$read_pickle(paste0(outdir, "df.pkl"))
reticulate::py_load_object(filename)