使用F#中的Deedle时间序列中的缺失值(2)

时间:2017-05-17 15:25:46

标签: filter f# series missing-data deedle

这个问题与此有关 Working with missing values in Deedle Time Series in F# (1)

假设我的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,我如何找回一个具有“相同”值而类型为Series<int,int>的系列????

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

例如,Series.dropMissing在应用于series4

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

它不会丢失缺失值!!

1 个答案:

答案 0 :(得分:3)

这里的主要问题是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)