使用Rpy2将熊猫时间序列转换为XTS格式

时间:2019-07-29 02:34:42

标签: python r pandas xts rpy2

我正在尝试使用rpy2在“ YieldCurve”包中调用函数“ Nelson.Siegel”。 “ Nelson.Siegel”以一个xts文件(比率)和一个列表(Marurity)作为输入,看来我不得不将熊猫数据帧转换为xts格式,而且我不确定如何实现。而且我不确定是否以正确的方式调用Nelson.Siegel函数。任何帮助将不胜感激。

我尝试使用pandas2ri.activate()将数据类型从pandas更改为r,但似乎需要进一步将其转换为xts格式。我尝试在xts包中导入as.xts,但无法与rpy2一起使用。

import pandas as pd
import numpy as np
from rpy2.robjects.packages import importr
import rpy2.robjects as robjects
base = importr('base')
utils = importr('utils')
utils.install_packages('YieldCurve', repos="http://cran.us.r-project.org")
Yieldcurve= importr('YieldCurve')
NelsonSiegel = robjects.r('Nelson.Siegel')
from rpy2.robjects import pandas2ri
pandas2ri.activate()
Maturity=[0.5,1,2]

df = pd.DataFrame(np.random.randint(0,30,size=(10,3)),
                   columns=["1","2","3"],
                  index=pd.date_range("20190101", periods=10))
NSParam= NelsonSiegel(df, Maturity)

错误消息:is.finite中的错误(如果来自<-as.numeric(from)的is.character(from)),则错误:   未为“列表”类型实现默认方法

1 个答案:

答案 0 :(得分:0)

指定Maturity应该是向量,而不是让转换器认为需要列表可以解决此问题:

Maturity=robjects.vectors.IntVector([0.5,1,2])

否则,首先检查您的熊猫数据帧是否已安全地转换为R数据帧:

df = pd.DataFrame(np.random.randint(0,30,size=(10,3)),
                  columns=["1","2","3"],
                  index=pd.date_range("20190101", periods=10))
base.print(df)