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

yay*_*990 7 python r dataframe rpy2 pandas

我在将DataFramePython中的pandas转换为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
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Jos*_*ich 4

您的调用失败的原因ADX是它需要一个包含 3 列的 xts 或类似矩阵的对象:最高价、最低价、收盘价。您的对象包含 4 列。r_dataframe在传递到之前删除日期列ADX,一切都应该正常。然后,您可以将日期时间列添加回输出ADX

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