2013-02-26 18 views
10

Non ho mai usato rpy2 prima, ma mi chiedo solo se potrei usarlo per salvare un oggetto python (un DataFrame panda) in un file leggibile da R. Ho problemi a spostare oggetti tra questi ambienti principalmente perché sto usando Windows e l'origine dati è un file Excel. Sì, il tipo con celle con testo tra virgolette, righe nuove e tutto ciò che CSV non è in grado di gestire adeguatamente.Posso usare rpy2 per salvare un dataframe panda in un file .Rdata?

Io di solito si basano su XLConnectJars, ma sembra essere rotto

Installing package(s) into ‘C:/Program Files/R/library’ 
(as ‘lib’ is unspecified) 
trying URL 'http://cran.csiro.au/bin/windows/contrib/2.15/XLConnectJars_0.2-4.zip' 
Content type 'application/zip' length 16538311 bytes (15.8 Mb) 
opened URL 
downloaded 15.3 Mb 

Warning in install.packages : 
    downloaded length 16011264 != reported length 16538311 

panda lo legge correttamente, ma ho bisogno di utilizzare le informazioni in R.

+2

L'avviso non è un errore. Probabilmente il pacchetto funzionerà ancora (ho avuto questo avviso a intermittenza senza problemi effettivi) – mnel

+0

@mnel Non riuscito con errore: 'pacchetto' XLConnectJars 'è stato trovato 0.2-0, ma'= XConnect' richiede == 0.2.4 '' – dmvianna

risposta

7

È possibile utilizzare rpy2 per fare questo. Una volta ottenuti i dati in un panda, è necessario trasmetterli a R. This link fornisce un'interfaccia sperimentale tra Python Pandas e R data.frames. Un esempio di codice copiato dal sito web:

from pandas import DataFrame 
import pandas.rpy.common as com 

df = DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C':[7,8,9]}, 
       index=["one", "two", "three"]) 
r_dataframe = com.convert_to_r_dataframe(df) 

print type(r_dataframe) 
<class 'rpy2.robjects.vectors.DataFrame'> 

print r_dataframe 
     A B C 
one 1 4 7 
two 2 5 8 
three 3 6 9 
+0

Quindi come scriveresti 'data.frame' in un file' .RData'? – RoyalTS

+2

Uso della funzione 'save'. –

1

Ecco come scrittura/lettura dei file con .RDatarpy2 (in quanto soluzione accettata è deprecato e non mostra come salvare a .RData file):

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

# read .RData file as a pandas dataframe 
def load_rdata_file(filename): 
    r_data = robjects.r['get'](robjects.r['load'](filename)) 
    df = pandas2ri.ri2py(r_data) 
    return df 

# write pandas dataframe to an .RData file 
def save_rdata_file(df, filename): 
    r_data = pandas2ri.py2ri(df) 
    robjects.r.assign("my_df", r_data) 
    robjects.r("save(my_df, file='{}')".format(filename)) 
Problemi correlati