web-dev-qa-db-ja.com

Rでのpickleファイル(PANDAS Python Data Frame))の読み取り

Pandas DataframeからRにpickleファイル(.pkl)を読み込む簡単な方法はありますか?

1つの可能性は、CSVにエクスポートしてRにCSVを読み取らせることですが、データフレームがかなり大きいため、これは非常に面倒に思えます。そうする簡単な方法はありますか?

ありがとう!

20
Vincent

pythonにpickleをロードし、pythonパッケージ_rpy2_(または同様の)を介してRにエクスポートできます。そうすると、データはpythonにリンクされたRセッションに存在します。次に行うことは、そのセッションを使用してRを呼び出し、RDSをファイルまたはRAMディスクに保存することです。その後、RStudioでそのファイルを読み戻すことができます。Rからpythonコマンドをトリガーする方法については、RパッケージrJythonおよびrPythonを参照してください。

あるいは、単純なpythonスクリプトを記述してPythonにデータをロードし(おそらく上記のRパッケージのいずれかを使用して)、フォーマットされたデータストリームをstdoutに書き込むことができます。その場合、スクリプトへのシステム全体の呼び出し(ピクルを指定する引数を含む)は、Rパッケージ_data.table_のfreadへの引数として使用できます。あるいは、標準関数を維持する場合は、system(..., intern=TRUE)と_read.table_の組み合わせを使用できます。

いつものように、この特定の猫の皮を剥ぐ方法はたくさんあります。基本的な手順は次のとおりです。

  1. Pythonでデータを読み込む
  2. データをRに表現します(たとえば、rpy2を介してオブジェクトをエクスポートするか、Rをもう一方の端で受信する準備ができた状態で書式設定されたテキストを標準出力に書き込みます)
  3. Rで表現されたデータを内部データ表現にシリアル化します(たとえば、rpy2またはfreadを介してオブジェクトをエクスポートします)
  4. (オプション)Rのそのセッションのデータを別のRセッションにアクセスできるようにします(つまり、rpy2でループを閉じるステップ、またはfreadを使用している場合は既に完了しています)。
6
russellpierce

Reticulate は、コメントでrussellpierceが示唆しているように、非常に簡単で非常に滑らかでした。

install.packages('reticulate')

その後、ドキュメントに記載されている例からPythonこのようなスクリプトを作成しました。

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のすべてのデータが得られました。

14
Ankur Sinha