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

How do I convert missing values into strings?

我有一个 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]

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

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'仍然有缺失值。

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

Frame.mapValues 的 Deedle 文档:

Builds a new data frame whose values are the results of applying the specified function on these values, but only for those columns which can be converted to the appropriate type for input to the mapping function

所以映射什么都不做,因为找到的是字符串,而不是字符串选项。

我注意到另一个函数似乎完全符合您的要求。

let df' = Frame.fillMissingWith "" df

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