如何将缺失值转换为字符串?

时间:2017-09-16 14:30:34

标签: f# missing-data deedle

我有Deedle DataFrame类型Frame<int,string>,其中包含一些缺失值。我想将缺失的值转换为空字符串""。我尝试使用valueOr函数,但这没有帮助。有没有办法做到这一点?

这是我的DataFrame

let s1 = Series.ofOptionalObservations [ 1 => Some("A"); 2 => None ]
let s2 = Series.ofOptionalObservations [ 1 => Some("B"); 2 => Some("C") ]
let df = Frame.ofColumns ["A", s1; "BC", s2]

df;;中输入FSI会产生一些信息,包括

ColumnTypes = seq [System.String; System.String];。因此,df的值属于string,而不是string option

这是函数valueOr

let valueOr (someDefault: 'a) (xo: 'a option) : 'a =
    match xo with
    | Some v -> v
    | None -> someDefault

我将辅助函数emptyFoo定义为:

let emptyFoo = valueOr ""

emptyFoo的签名是string option -> string。这意味着在以下命令中编译器不应接受emptyFoo

let df' = Frame.mapValues emptyFoo df

这是因为df的值属于string而非string option

仍然,编译器没有抱怨并且代码运行。但是,df'仍然缺少值。

有没有办法将缺失值转换为空字符串?

1 个答案:

答案 0 :(得分:4)

Frame.mapValues的Deedle文档:

  

构建一个新的数据框,其值是在这些值上应用指定函数的结果,但仅适用于那些可以转换为适当类型以输入映射函数的列

因此,映射不会执行任何操作,因为找到了字符串,而不是字符串选项。

我注意到另一个似乎完全符合你想要的功能。

let df' = Frame.fillMissingWith "" df

我注意到的关键是Deedle将这些缺失值显示为<missing>,表明它使用了它自己的表示(例如,与option相对)。有了这些知识,我猜想库会提供一些操作缺失值的方法,所以我在IDE中进行Frame.并浏览可用函数列表及其文档来探索API。