【问题标题】:Convert pandas timeseries to xts format using rpy2使用 rpy2 将 pandas 时间序列转换为 xts 格式
【发布时间】:2019-07-29 02:34:42
【问题描述】:

我正在尝试使用 rpy2 调用“YieldCurve”包中的函数“Nelson.Siegel”。 'Nelson.Siegel' 需要一个 xts 文件(rates)和一个列表(Marurity)作为输入,看来我必须将 pandas 数据框转换为 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(if (is.character(from)) from

【问题讨论】:

    标签: python r pandas xts rpy2


    【解决方案1】:

    指定Maturity 应该是一个向量,而不是让转换器假设需要一个列表可能会解决这个问题:

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

    否则,首先检查您的 pandas 数据帧是否安全地转换为 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)
    

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 2013-08-18
      • 2014-07-17
      • 2017-03-06
      • 2020-08-06
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2023-02-09
      相关资源
      最近更新 更多