2017-09-16 101 views
3

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

键入FSIdf;;得到一些信息,包括

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

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

回答

2

的Deedle文档Frame.mapValues

构建一个新的数据帧,其值是应用指定的功能这些值,的结果,但只对可被转化到合适的类型的那些列输入到映射函数

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

我注意到另一个功能似乎正是你想要的。

let df' = Frame.fillMissingWith "" df 

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

+0

谢谢。我使用'fillMissingWith'作为'float'值,一些精神障碍阻止我考虑将它用于字符串。 – Soldalma