在 F# 中处理 Deedle 时间序列中的缺失值(二)

Working with missing values in Deedle Time Series in F# (2)

这个问题与

假设我有一个 Series<'K,'T opt> 有一些缺失值

比如我得到了一个系列

 series4;;
 val it : Series<int,int opt> =
 1 -> 1         
 2 -> 2         
 3 -> 3         
 4 -> <missing> 

我可以这样得到它:

 let series1 = Series.ofObservations [(1,1);(2,2);(3,3)]
 let series2 = Series.ofObservations [(1,2);(2,2);(3,1);(4,4)]

 let series3 = series1.Zip(series2,JoinKind.Outer);;
 let series4 = series3 |> Series.mapValues fst

但是,在 Deedle,如果您这样做

let series1_plus_2 = series1+series2

val series1_plus_2 : Series<int,int> =
1 -> 3         
2 -> 4         
3 -> 4         
4 -> <missing> 

你可以看到 Series<int,int> 类型自然也允许缺失值。这似乎是在 Deedle 中使用函数处理缺失值的自然方式

所以我的问题是 Series<int,int opt> 类型的系列 4,我如何取回具有 "same" 值但类型 Series<int,int> 的系列????

值得注意的是,奇怪的事情正在发生

例如,Series.dropMissing 在应用于 series4

时没有预期的行为
Series.dropMissing series4;;
 val it : Series<int,int opt> =
 1 -> 1         
 2 -> 2         
 3 -> 3         
 4 -> <missing> 

它没有删除缺失值!!

这里的主要问题是 int opt 不是 Deedle 处理缺失值的标准方法。 series4 中的值没有丢失,但它有值 OptionalValue.Missing。例如,您可以通过以下方式将 Series<int, int opt> 转换为 Series<int, int> let series4' = series4 |> Series.mapAll (fun _ v -> v |> Option.bind OptionalValue.asOption)