2014-01-22 5 views
16

Ich habe eine Reihe von .RData Zeitreihen-Dateien und möchte sie direkt in Python laden, ohne zuerst die Dateien in eine andere Erweiterung (wie. CSV) zu konvertieren. Irgendwelche Ideen über den besten Weg, dies zu erreichen?Loading. RData-Dateien in Python

Antwort

20

Die Leute fragen so etwas auf der R-Hilfe und R-Dev-Liste und die übliche Antwort ist, dass der Code die Dokumentation für das .RData Dateiformat ist. Also jede andere Implementierung in einer anderen Sprache ist hard ++.

Ich denke, der einzige vernünftige Weg ist, RPy2 zu installieren und die load-Funktion von R zu verwenden, um zu den entsprechenden Python-Objekten zu konvertieren, wie Sie gehen. Die .RData Datei kann sowohl strukturierte Objekte als auch einfache Tabellen enthalten.

Linky: http://rpy.sourceforge.net/rpy2/doc-2.4/html/

Quicky:

>>> import rpy2.robjects as robjects 
>>> robjects.r['load'](".RData") 

Objekte werden nun in den R Arbeitsbereich geladen.

>>> robjects.r['y'] 
<FloatVector - Python:0x24c6560/R:0xf1f0e0> 
[0.763684, 0.086314, 0.617097, ..., 0.443631, 0.281865, 0.839317] 

, dass ein einfacher Skalar ist, ist d ein Datenrahmen, ich Teilmenge kann Spalten erhalten:

>>> robjects.r['d'][0] 
<IntVector - Python:0x24c9248/R:0xbbc6c0> 
[  1,  2,  3, ...,  8,  9,  10] 
>>> robjects.r['d'][1] 
<FloatVector - Python:0x24c93b0/R:0xf1f230> 
[0.975648, 0.597036, 0.254840, ..., 0.891975, 0.824879, 0.870136] 
+0

Ein nützlicher zu addierender Kommentar: normalerweise werden Sie diese Objekte in Numpy manipulieren wollen, also würde ich folgendes hinzufügen: 'from rpy2.robjects import numpy2ri' und dann' numpy2ri.ri2numpy (r ['d']) '. Sie haben dann numpige Arrays, die Sie auf "pythonische" Weise manipulieren können. – jonathanrocher

+0

@jonathanrocher es scheint in diesen Tagen (numpy 1.11.1) du kannst einfach 'np.array (r [' d ']) '' und ich habe 'ri2numpy' in' numpy2ri' nicht mehr. – daknowles

2

Es gibt eine dritte Partei Bibliothek rpy genannt, und Sie können diese Bibliothek verwenden .RData zu laden Dateien. Sie können dies über eine pip installieren pip instally rpy wird der Trick tun, wenn Sie nicht rpy haben, dann schlage ich vor, dass Sie einen Blick auf, wie man es installieren. Ansonsten können Sie einfach do:

from rpy import * 
r.load("file name here") 

EDIT:

Es scheint, wie ich ein wenig der alten Schule gibt, s rpy2 jetzt bin, so Sie verwenden können.

+0

genial, danke – Stu

+2

Immer noch mit 'rpy'? Das ist groovig. –

+0

@Stu Wenn dies Ihnen geholfen hat, ziehen Sie in Betracht, die [Antwort] zu akzeptieren (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

1

Jupyter Notebook Benutzer

Wenn Sie Jupyter Notebook verwenden, müssen Sie zwei Schritte tun:

Schritt 1: Gehen Sie auf http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2 und downloaden Python-Schnittstelle zum R Sprache (Embedded R) in meinem Fall ich verwende rpy2-2.8.6-cp36-cp36m-win_amd64.whl

diese Datei im gleichen Arbeitsverzeichnis Legen Sie befinden sich in

Schritt 2:. gehen Sie zu Ihrem Jupyter Notebook und schreiben Sie die folgenden Befehle

# This is to install rpy2 library in Anaconda 
!pip install rpy2-2.8.6-cp36-cp36m-win_amd64.whl 

und dann

# This is important if you will be using rpy2 
import os 
os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2' 

und dann

import rpy2.robjects as robjects 
from rpy2.robjects import pandas2ri 
pandas2ri.activate() 

Dies sollte Ihnen ermöglichen, R Funktionen in Python zu verwenden. Nun müssen Sie die readRDS importieren als

readRDS = robjects.r['readRDS'] 
df = readRDS('Data1.rds') 
df = pandas2ri.ri2py(df) 
df.head() 

Congratulations folgen!jetzt haben Sie die Datenrahmen Sie

Allerdings wollte, rate ich Ihnen, es in Beize Datei zur späteren Zeit Verwendung in Python zu speichern als

df.to_pickle('Data1') 

Also das nächste Mal, wenn Sie es einfach von

df1=pd.read_pickle('Data1') 
verwenden