将python pandas DataFrame转换为R dataframe以与rpy2一起使用

时间:2012-07-16 20:17:12

标签: python r dataframe pandas rpy2

我无法将Python中的panda DataFrame转换为R对象,以便将来在R中使用rpy2。

新的pandas发布0.8.0(几周前发布)具有将pandas DataFrames转换为R DataFrames的功能。问题在于转换我的pandas DataFrame的第一列,它由python datetime对象(连续地,在时间序列中)组成。转换为R数据帧会返回日期和时间的StrVector,而不是R datetime类型对象的向量,我相信这些对象称为“POSIXct”对象。

我知道使用命令“as.POSIXct('yyyy-mm-dd hh:mm:ss')”将返回类型的字符串转换为POSIXct的命令。不幸的是,我无法找到使用python和rpy2将StrVector中的所有字符串转换为POSIXct的方法。日期需要采用POSIXct格式与R中的TTR库一起使用。下面是相关的python代码:

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

此外,由于StrVector的定义,我不相信StrVector可以通过迭代将每个对象单独转换为POSIXct对象。也许有一种方法可以将StrVector转换为通用的?

非常感谢任何有关此事的帮助/见解。我是一名新手程序员,并且已经开展了几个小时的工作,现在无济于事。

谢谢!

3 个答案:

答案 0 :(得分:4)

你的ADX调用失败的原因是因为它需要一个xts或类似矩阵的对象,有3列:High,Low,Close。您的对象包含4列。在将r_dataframe传递给ADX之前删除日期列,一切都应该有效。然后,您可以将日期时间列添加回ADX输出。

或者,如果您可以将R data.frame的row.names属性设置为Date列的值,然后移除Date列,则可以转换您的R数据通过调用as.xts(r.data.frame)将.frame设置为xts对象。然后,您可以将其传递给ADX并将结果转换回pandas DataFrame。

答案 1 :(得分:1)

GaleHub上的dalejung最近在使用rpy2创建更紧密的pandas-xts界面方面做了大量工作,您可以与他联系或加入PyData邮件列表

答案 2 :(得分:-1)

这不是你想要的答案。但是如何使用piper库?

它只是python和R之间的“管道”。因此它很少出现关于转换的问题。 https://pypi.python.org/pypi/piper