2016-02-01 12 views
8

C'è un modo semplice per leggere i file pickle (.pkl) da Pandas Dataframe in R?Lettura di un file pickle (PANDAS Python Data Frame) in R

Una possibilità è quella di esportare in CSV e fare in modo che R legga il CSV, ma questo mi sembra davvero ingombrante perché i miei dataframes sono piuttosto grandi. C'è un modo più semplice per farlo?

Grazie!

+1

È anche possibile esaminare 'fread' dal pacchetto' data.table'. Legge in file CSV sostanzialmente più veloce della base R (che è molto lento). Il test rapido con un file csv da 150 MB mostra 11 secondi con 'read.csv' e 2 secondi con' fread'. – Laterow

+0

Perché non archiviare in un database come SQLite a cui sia R che Python possono leggere/scrivere? In effetti, questo è lo scopo di RDMS per fungere da archivio centrale per i programmi di utilizzo finale. – Parfait

+0

@Parfait Se i dati sono grandi, la memorizzazione dei dati in un RDMS e in particolare la serializzazione su R sarà (relativamente lenta). Solo le mie osservazioni: velocità RDMS per questo tipo di operazione. Nella mia esperienza, lo streaming menzionato da Laterrow e nella mia risposta si rivelerà molto più veloce nella maggior parte dei casi con dataset di grandi dimensioni. L'uso di rpy2 potrebbe rivelarsi più lento dello streaming, ma ha il vantaggio (come RDMS) di mantenere i dati strutturati come stanno andando. – russellpierce

risposta

4

È possibile caricare il pickle in python e quindi esportarlo in R tramite il pacchetto python rpy2 (o simile). Dopo averlo fatto, i dati esisteranno in una sessione R collegata a python. Sospetto che ciò che vorresti fare successivamente sia usare quella sessione per chiamare R e salvare RDS in un file o disco RAM. Poi, nel RStudio si può leggere il file indietro nel. Guardate i pacchetti R rJython e rPython per i modi in cui si potrebbe innescare i comandi Python da R.

In alternativa, si potrebbe scrivere uno script python semplice per caricare i dati in Python (probabilmente usando uno dei pacchetti R sopra riportati) e scrivere un flusso di dati formattato su stdout. Quindi l'intera chiamata di sistema allo script (incluso l'argomento che specifica il pickle) può essere utilizzata come argomento a fread nel pacchetto R data.table. In alternativa, se si desidera mantenere le funzioni standard, è possibile utilizzare la combinazione di system(..., intern=TRUE) e read.table.

Come al solito, ci sono/molti/modi per skinare questo particolare gatto. I passi fondamentali sono:

  1. caricare i dati in pitone
  2. Express I dati a R (ad esempio, esportare l'oggetto tramite rpy2 o scrittura di testo formattato stdout con R pronto a riceverlo sull'altra estremità)
  3. serializzare i dati espressi in R ad una rappresentazione interna dei dati (ad esempio, esportare l'oggetto tramite rpy2 o fread)
  4. (opzionale) mettere i dati di quella sessione di R accessibili ad un'altra sessione R (cioè, il passo per chiudere il ciclo con rpy2, o se hai usato fread allora hai già finito).
+1

Interessante, grazie! Come potrei fare per esportare 'r_dataframe' e aprirlo per dire, Rstudio? – Vincent

+0

Ho ampliato le tue opzioni sopra. – russellpierce