我有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'
仍然缺少值。
有没有办法将缺失值转换为空字符串?
答案 0 :(得分:4)
Frame.mapValues
的Deedle文档:
构建一个新的数据框,其值是在这些值上应用指定函数的结果,但仅适用于那些可以转换为适当类型以输入映射函数的列
因此,映射不会执行任何操作,因为找到了字符串,而不是字符串选项。
我注意到另一个似乎完全符合你想要的功能。
let df' = Frame.fillMissingWith "" df
我注意到的关键是Deedle将这些缺失值显示为<missing>
,表明它使用了它自己的表示(例如,与option
相对)。有了这些知识,我猜想库会提供一些操作缺失值的方法,所以我在IDE中进行Frame.
并浏览可用函数列表及其文档来探索API。