Deedle系列指数超出范围

时间:2015-03-03 08:21:33

标签: f# deedle

您好我使用以下代码:

let timeser = ser |> Series.sampleTimeInto(TimeSpan(0,5,0)) Direction.Backward Series.lastValue

但是经常会出现以下错误;带有附加信息的System.IndexOutOfRangeException:索引超出了数组的范围。

有谁知道如何解决此错误。

1 个答案:

答案 0 :(得分:1)

有点难以猜测是什么问题,因为我们无法运行您的代码。但是,例外的最明显原因是Series.lastValue失败,因为其中一个块中没有数据。

假设你有一个只有2天的值系列:

let ser = series [ DateTime(2000, 1, 1) => 1.0; DateTime(2000, 1, 2) => 2.0 ]

如果您尝试使用Series.lastValue将其采样为12小时块,则会失败(因为您实际上只有两个块实际包含一些值):

// This shows you that some of the chunks are empty
ser |> Series.sampleTime (TimeSpan(12,0,0)) Direction.Backward 
// This will fail
ser |> Series.sampleTimeInto(TimeSpan(12,0,0)) Direction.Backward Series.lastValue

您可以通过各种方式处理此问题,但最简单的方法是为没有数据的块返回缺失值:

ser |> Series.sampleTimeInto(TimeSpan(12,0,0)) Direction.Backward (fun s -> 
  if s.IsEmpty then nan else Series.lastValue s)