【问题标题】:Deedle OptionalValue.Missing can't be dropped by Series.dropmissingDeedle OptionalValue.Missing 不能被 Series.dropmissing 丢弃
【发布时间】:2014-08-16 04:06:04
【问题描述】:

这是来自http://bluemountaincapital.github.io/Deedle/reference/deedle-seriesmodule.html的代码示例

let s1 = series [ 1 => 1.0; 2 => Double.NaN ]
s1 |> Series.dropMissing 

Missing 值将按预期删除。但是,如果我将其更改为

let s2 = series [ 1 => OptionalValue(1.0); 2 => OptionalValue.Missing ]
s2 |> Series.dropMissing 

不会删除缺失值。

我注意到 S2 是一个

Series<int,OptionalValue<float>> 

在 s1 为时输入

Series<int,float>

这是设计使然吗?

我问这个问题的原因是我有这个答案Deedle moving window stats calcuation with a dynamic condition and boundary.atending的代码

let lastKey = ref None
let r = 
  ts |> Series.aggregateInto
      (WindowWhile(fun d1 d2 -> d1.AddMonths(1) >= d2)) (fun seg -> seg.Data.LastKey())
      (fun ds -> 
         match lastKey.Value, ds.Data.LastKey() with 
         | Some lk, clk when lk = clk -> OptionalValue.Missing
         | _, clk -> lastKey := Some clk; OptionalValue(ds.Data))
     |> Series.dropMissing

Series.aggregateInto 可以以某种方式返回非 OptionalValue 系列,同时仍然包含缺失值。如果我想在我创建的系列中使用 OptionalValue.Missing 以便它们可以被 Stats 正确忽略。请问正确的做法是什么?

此外,将缺失值的系列/帧写入 csv Deedle 将在输出中放置空白。但是,如果 Series/Frame 包含 OptionalValue Deedle 会将字符串放入输出中。这是设计的吗?

【问题讨论】:

    标签: f# deedle


    【解决方案1】:

    Deedle 中的OptionalValue 类型是系列中可选值的内部表示。所以,如果你有Series&lt;Date, float&gt;,它实际上会将数据存储为OptionalValue&lt;float&gt;。我们不会对用户完全隐藏这一点 - 有时(例如在聚合示例中),Deedle 会采用OptionalValue,然后直接在内部表示中使用它以加快速度。

    但是,您可能永远不想使用Series&lt;K, OptionalValue&lt;T&gt;&gt;,因为这是一种奇怪的系列(Deedle 会自动处理缺失值,因此没有必要这样做)。

    如果要在创建系列时指定缺失值,可以使用:

    let s2 = Series.ofOptionalObservations [ 1 => Some(1.0); 2 => None ]
    s2 |> Series.dropMissing 
    

    F# API 通常更喜欢标准的 F# option 类型,所以这是 ofOptionalObservations 所采用的。 dropMissing 函数适用于以这种方式创建的系列。

    【讨论】:

    • 感谢您的解释。现在这是有道理的。我试图在聚合逻辑的基础上对 DS 进行另一级别的检查,并忽略任何具有所需窗口大小数量但窗口中并非所有项目都包含值的 DS。
    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多