簡體   English   中英

在 R 中讀取泡菜文件(PANDAS Python 數據幀)

[英]Reading a pickle file (PANDAS Python Data Frame) in R

有沒有一種簡單的方法可以將 Pandas Dataframe 中的 pickle 文件 (.pkl) 讀取到 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")

這給了我之前以pickle格式存儲在R中的所有數據。

你也可以在不離開你的 R 編輯器的情況下在 R 中執行所有這些操作(前提是你的系統 python 可以訪問熊貓)......例如

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

編輯:如果您可以安裝和使用 {reticulate} 包,那么這個答案可能已經過時了。 有關更簡單的路徑,請參閱下面的其他答案。

您可以在 python 中加載泡菜,然后通過 python 包rpy2 (或類似包)將其導出到 R。 完成此操作后,您的數據將存在於鏈接到 python 的 R 會話中。 我懷疑您接下來要做的是使用該會話來調用 R 並將 RDS 保存到文件或 RAM 磁盤。 然后在 RStudio 中,您可以重新讀取該文件。查看 R 包rJythonrPython了解可以從 R 觸發 python 命令的方法。

或者,您可以編寫一個簡單的 Python 腳本來在 Python 中加載您的數據(可能使用上面提到的 R 包之一)並將格式化的數據流寫入標准輸出。 然后,對腳本的整個系統調用(包括指定 pickle 的參數)可以用作 R 包data.table fread的參數。 或者,如果您想保持標准功能,您可以使用system(..., intern=TRUE)read.table

像往常一樣,有/許多/方法可以給這只特定的貓剝皮。 基本步驟是:

  1. 在python中加載數據
  2. 將數據表達到 R(例如,通過 rpy2 導出對象或將格式化文本寫入標准輸出,R 准備在另一端接收它)
  3. 將 R 中表達的數據序列化為內部數據表示(例如,通過 rpy2 或fread導出對象)
  4. (可選)使另一個 R 會話可以訪問該 R 會話中的數據(即,使用 rpy2 關閉循環的步驟,或者如果您一直在使用fread那么您已經完成了)。

要添加到上面的答案:您可能需要指向不同的 conda env 才能訪問 Pandas:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM