我无法将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转换为通用的?
非常感谢任何有关此事的帮助/见解。我是一名新手程序员,并且已经开展了几个小时的工作,现在无济于事。
谢谢!
答案 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)
答案 2 :(得分:-1)
这不是你想要的答案。但是如何使用piper库?
它只是python和R之间的“管道”。因此它很少出现关于转换的问题。 https://pypi.python.org/pypi/piper