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



有没有一种简单的方法可以将泡菜文件(.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 包rJythonrPython,了解从 R 触发 python 命令的方法。

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

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

  1. 在python中加载数据
  2. 将数据表达给 R(例如,通过 rpy2 导出对象或将格式化文本写入 stdout,R 准备在另一端接收它(
  3. 将 R 中的表达式数据序列化为内部数据表示(例如,通过 rpy2 或 fread 导出对象(
  4. (可选(使 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)

最新更新