2012-07-16 30 views
7

Ho problemi a convertire un panda DataFrame in Python in un oggetto R, per uso futuro in R usando rpy2.problema di conversione python panda DataFrame in R dataframe da utilizzare con rpy2

Il nuovo rilascio di panda 0.8.0 (rilasciato poche settimane fa) ha una funzione per convertire i DataFrame pand in R DataFrames. Il problema è nella conversione della prima colonna dei miei pandi DataFrame, che consiste in oggetti datetime python (successivamente, in una serie temporale). La conversione in un dataframe R restituisce uno StrVector delle date e delle ore, piuttosto che un vettore di oggetti di tipo datetime R che credo siano chiamati oggetti "POSIXct".

Conosco il comando per convertire una stringa del tipo restituita a POSIXct, utilizzando il comando "as.POSIXct ('aaaa-mm-gg hh: mm: ss')". Sfortunatamente non sono stato in grado di capire come convertire tutte queste stringhe in StrVector in POSIXct usando python e rpy2. Le date devono essere nel formato POSIXct per essere utilizzato con la libreria TTR in R. Di seguito è riportato il codice python rilevanti:

import pandas 
from pandas import * 
import pandas.rpy.common as com 
import rpy2.robjects as robjects 
r = robjects.r 
r.library('TTR')  #library contains the function ADX, to be used later 

dataframe = read_csv('file_name', parse_dates = [0], names = ['Date','Col1','Col2','Col3']  #command makes 1st column into datetime.datetime object 
r_dataframe = com.convert_to_r_dataframe(dataframe) 

ADX = r['ADX']   #creating a name for an R function in python 
adx = ADX(r_dataframe) #will not work because the dates in r_dataframe are in a StrVector 

Inoltre non credo che lo StrVector può essere iterato attraverso convertire ogni oggetto per un oggetto POSIXct individualmente, a causa della definizione di StrVector. Forse c'è un modo per lanciare un StrVector su uno generico?

Qualsiasi aiuto/approfondimento su questo argomento è molto apprezzato. Sono un programmatore alle prime armi e ci sto lavorando da un paio d'ore senza alcun risultato.

Grazie!

risposta

4

Il motivo per cui la chiamata ADX non riesce è perché prevede un oggetto xts o simile a una matrice con 3 colonne: Alto, Basso, Chiudi. Il tuo oggetto contiene 4 colonne. Rilasciare la colonna della data prima di passare r_dataframe a ADX e tutto dovrebbe funzionare. È quindi possibile aggiungere nuovamente la colonna datetime all'output ADX.

Oppure, se è possibile impostare l'attributo row.names della vostra R data.frame ai valori della colonna Date e quindi rimuovere la colonna Date, è possibile convertire il vostro data.frame R a un oggetto XTS chiamando as.xts(r.data.frame). Quindi puoi passarlo a ADX e convertire il risultato in un DataFrame panda.

+0

Grazie mille Joshua. Questo aiuta molto. – yayder9990

+0

Felice di poter ottenere l'autore/manutentore effettivo del pacchetto per rispondere alla domanda! – yayder9990

1

dalejung su GitHub ha fatto un po 'di lavoro di recente nella creazione di una più stretta un'interfaccia panda-XTS con rpy2, si potrebbe ottenere in contatto con lui o iscriviti alla mailing list PyData

-1

Non è rispondere a ciò che si desidera. Ma che ne dici di usare la libreria piper?

È solo "pipe" tra python e R. Pertanto non si verifica raramente un problema relativo alla conversione. https://pypi.python.org/pypi/piper