在 R 中读取 pickle 文件(PANDAS Python 数据帧)

新手上路,请多包涵

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

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

谢谢!

原文由 Vincent 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

编辑:如果您可以安装和使用 {reticulate} 包,那么这个答案可能已经过时了。请参阅下面的其他答案以获得更简单的路径。

您可以在 python 中加载泡菜,然后通过 python 包 rpy2 (或类似的)将其导出到 R。完成后,您的数据将存在于链接到 python 的 R 会话中。我怀疑您接下来要做的是使用该会话调用 R 并将 RDS 保存到文件或 RAM 磁盘。然后在 RStudio 中,您可以读回该文件。查看 R 包 rJythonrPython 了解可以从 R 触发 python 命令的方法。

或者,您可以编写一个简单的 python 脚本以在 Python 中加载数据(可能使用上述 R 包之一)并将格式化的数据流写入标准输出。然后,对脚本的整个系统调用(包括指定泡菜的参数)可以用作 fread 在 R 包 data.table 中的参数。或者,如果您想保持标准功能,可以使用 system(..., intern=TRUE)read.table 的组合。

像往常一样,有/很多/方法可以给这只猫剥皮。基本步骤是:

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

原文由 russellpierce 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如 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")

这给了我之前以 pickle 格式存储在 R 中的所有数据。

您也可以在不离开 R 编辑器的情况下在 R 中在线执行所有这些操作(前提是您的系统 python 可以访问 pandas)…例如

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

原文由 Ankur Sinha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题