7

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

新的 pandas 版本 0.8.0(几周前发布)具有将 pandas DataFrames 转换为 R DataFrames 的功能。问题在于转换我的 pandas DataFrame 的第一列,该列由 python datetime 对象(依次按时间序列)组成。转换为 R 数据帧返回日期和时间的 StrVector,而不是我认为称为“POSIXct”对象的 R 日期时间类型对象的向量。

我知道使用命令“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 转换为通用的?

非常感谢您对此事的任何帮助/见解。我是一名新手程序员,现在已经为此工作了几个小时,但无济于事。

谢谢!

4

3 回答 3

4

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

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

于 2012-07-16T20:34:51.053 回答
1

GitHub 上的 dalejung 最近在使用 rpy2 创建更紧密的 pandas-xts 接口方面做了很多工作,你可以联系他或加入 PyData 邮件列表

于 2012-09-08T23:14:40.083 回答
-1

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

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

于 2014-11-12T02:50:41.643 回答