在R

时间:2016-02-01 00:13:55

标签: python r pandas dataframe

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

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

谢谢!

3 个答案:

答案 0 :(得分:10)

如russellpierce在评论中所建议的,

Reticulate非常简单且超级流畅。

sp_start_job

之后,我从他们的文档中给出的示例中创建了一个像这样的Python脚本。

Python文件:

curl --request POST --url http://app_domain/v1/posts/ --header 'authorization: TOKEN aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' --header 'accept: application/json' --header 'content-type: application/json' --form 'media=@path/1.mp4' --form 'description="My first Video"'

{"detail":"JSON parse error - 'utf-8' codec can't decode byte 0xba in position 193: invalid start byte"}


curl --request POST --url http://app_domain/v1/posts/ --header 'authorization: TOKEN aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' --header 'accept: application/json' --header 'content-type: application/json' --form 'media=@path/1.mp4&description="My first Video"'

Warning: setting file path/1.mp4&description="My first Video" 
Warning:  failed!
curl: (26) read function returned funny value


curl --request POST --url http://app_domain/v1/posts/ --header 'authorization: TOKEN aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' --header 'accept: application/json' --header 'content-type: application/json' --form 'media=@path/1.mp4 description="My first Video"'

Warning: setting file path/1.mp4 description="Myfirst Video" 
Warning:  failed!
curl: (26) read function returned funny value

然后我的R文件如下:

install.packages('reticulate')

这给了我所有以R泡菜格式存储在R中的数据。

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:3)

要添加到上面的答案中,您可能需要指向另一个conda env才能进入熊猫:

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

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