2012-07-16 4 views
7

Je rencontre des problèmes lors de la conversion d'un pandas DataFrame en Python en un objet R, pour un usage ultérieur dans R en utilisant rpy2.problème lors de la conversion de python pandas DataFrame en R dataframe pour utilisation avec rpy2

La nouvelle version de pandas 0.8.0 (sortie il y a quelques semaines) a une fonction pour convertir les données de pandas en R DataFrames. Le problème est dans la conversion de la première colonne de mes pandas DataFrame, qui se compose d'objets datetime python (successivement, dans une série chronologique). La conversion en une dataframe R renvoie un StrVector des dates et des heures, plutôt qu'un vecteur d'objets de type datetime R que je crois être appelés des objets "POSIXct".

Je connais la commande pour convertir une chaîne du type retourné à un POSIXct, en utilisant la commande "as.POSIXct ('aaaa-mm-jj hh: mm: ss')". Malheureusement, je n'ai pas réussi à trouver le moyen de convertir toutes ces chaînes dans le StrVector en POSIXct en utilisant python et rpy2. Les dates doivent être au format POSIXct à utiliser avec la bibliothèque TTR R. Voici le code python pertinent:

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 

En outre, je ne crois pas que le StrVector peut être itérés pour convertir chaque objet un objet POSIXct individuellement, en raison de la définition d'un StrVector. Peut-être existe-t-il un moyen de transformer un StrVector en un générique?

Toute aide ou compréhension de ce sujet est grandement appréciée. Je suis un programmeur novice et travaille sur ce sujet depuis quelques heures maintenant en vain.

Merci!

Répondre

4

La raison pour laquelle votre appel ADX échoue est qu'il attend un objet xts ou de type matrice avec 3 colonnes: Élevé, Bas, Fermer. Votre objet contient 4 colonnes. Déposez la colonne date avant de passer r_dataframe à ADX et tout devrait fonctionner. Vous pouvez ensuite ajouter la colonne datetime à la sortie ADX.

Ou, si vous pouvez définir l'attribut row.names de votre R data.frame aux valeurs de la colonne Date puis retirez la colonne Date, vous pouvez convertir votre R data.frame à un objet XTS en appelant as.xts(r.data.frame). Ensuite, vous pouvez passer à ADX et convertir le résultat en un pandas DataFrame.

+0

Merci beaucoup Joshua. Cela aide beaucoup. – yayder9990

+0

Heureux que je pourrais obtenir l'auteur/mainteneur du paquet pour répondre à la question! – yayder9990

1

dalejung sur GitHub a fait un peu de travail récemment dans la création d'un Pandas-XTS plus serré interface avec rpy2, vous pouvez entrer en contact avec lui ou se joindre à la liste de diffusion PyData

-1

Il est répond pas à ce que vous voulez. Mais qu'en est-il de l'utilisation de la bibliothèque piper?

C'est juste "pipe" entre python et R. Ainsi, il ne se produit pas rarement un problème de conversion. https://pypi.python.org/pypi/piper