2016-02-01 5 views
8

Gibt es eine einfache Möglichkeit, Pickle-Dateien (.pkl) aus Pandas Dataframe in R zu lesen?Lesen einer Beizdatei (PANDAS Python Data Frame) in R

Eine Möglichkeit besteht darin, in CSV zu exportieren und R die CSV lesen zu lassen, aber das erscheint mir sehr umständlich, weil meine Datenrahmen ziemlich groß sind. Gibt es einen einfacheren Weg?

Danke!

+1

Sie können auch aus dem 'data.table' Paket nach' fread' suchen. Es liest CSV-Dateien wesentlich schneller als Base R (was wirklich langsam ist). Schnelltest mit einer 150 MB CSV-Datei zeigt 11 Sekunden mit 'read.csv' und 2 Sekunden mit' fread'. – Laterow

+0

Warum nicht einfach in einer Datenbank wie SQLite speichern, auf die sowohl R als auch Python lesen/schreiben können? Dies ist der Zweck von RDMS, als zentrales Repository für Endnutzerprogramme zu dienen. – Parfait

+0

@Parfait Wenn die Daten groß sind, wird das Speichern der Daten in einem RDMS und insbesondere das Serialisieren dieser Daten in R (relativ langsam) sein. Nur meine Beobachtungen zu RDMS Geschwindigkeit für diese Art von Operation. Meiner Erfahrung nach wird das Streaming, wie von Laterrow und in meiner Antwort erwähnt, in den meisten Fällen mit großen Datensätzen viel schneller sein. Die Verwendung von rpy2 könnte langsamer sein als das Streaming - aber es hat den Vorteil (wie RDMS), die Daten strukturiert zu halten. – russellpierce

Antwort

4

Sie könnten die Beize in Python laden und dann über das Python-Paket rpy2 (oder ähnlich) in R exportieren. Sobald Sie dies getan haben, sind Ihre Daten in einer R-Sitzung vorhanden, die mit Python verknüpft ist. Ich vermute, dass das, was Sie als nächstes tun möchten, wäre, diese Sitzung zu verwenden, um R und saveRDS in einer Datei oder einem RAM-Datenträger aufzurufen. Dann in RStudio können Sie diese Datei wieder einzulesen. Schauen Sie sich die R-Pakete rJython und rPython nach Möglichkeiten, in dem Sie die Python-Befehle von R. auslösen könnte

Alternativ Sie ein einfaches Python-Skript schreiben könnte Ihre Daten laden in Python (wahrscheinlich unter Verwendung eines der oben erwähnten R-Pakete) und schreibe einen formatierten Datenstrom nach stdout. Dann kann der gesamte Systemaufruf an das Skript (einschließlich des Arguments, das Ihre Beize angibt) als Argument für fread im R-Paket data.table verwendet werden. Wenn Sie die Standardfunktionen beibehalten möchten, können Sie alternativ auch die Kombination system(..., intern=TRUE) und verwenden.

Wie üblich, gibt es/viele/Möglichkeiten, diese bestimmte Katze zu häuten. Die grundlegenden Schritte sind:

  1. lädt die Daten in Python
  2. die Daten an R Express (zB das Objekt über rpy2 exportieren oder zu schreiben formatierten Text mit R nach stdout bereit, es am anderen Ende zu empfangen)
  3. Serialisieren der exprimierten Daten in R an eine interne Datendarstellung (zum Beispiel des Objekts über rpy2 oder fread Export)
  4. (optional), die Daten in dieser Sitzung von R zugänglich zu einer anderen R-Sitzung (das heißt der Schritt, Make zu schließen die Schleife mit rpy2, oder wenn Sie fread verwendet haben, dann sind Sie bereits fertig.
+1

Interessant, danke! Wie würde ich 'r_dataframe' exportieren und es in, sagen wir, Rstudio öffnen? – Vincent

+0

Ich erweiterte auf Ihre Optionen oben. – russellpierce