2017-09-16 18 views
3

Frame<int,string>DeedleDataFrameには欠損値が含まれています。不足している値を空の文字列""に変換したいと思います。私はvalueOr機能を使用しようとしましたが、それは役に立たなかった。これを行う方法はありますか?ここで欠損値を文字列に変換するにはどうすればよいですか?

は私DataFrameです:FSIdf;;を入力

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] 

ColumnTypes = seq [System.String; System.String];を含むいくつかの情報が得られます。したがって、dfの値はであり、string optionではありません。

これは関数valueOrある:emptyFooの署名がstring option -> stringある

let emptyFoo = valueOr "" 

:として私は補助機能emptyFoo定義

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

。これはemptyFooは、以下のコマンドでコンパイラに許容してはならないことを意味:

let df' = Frame.mapValues emptyFoo df 

dfの値はタイプstringないstring optionであるためです。

まだ、コンパイラは文句を言わずにコードを実行します。ただし、df'にはまだ値がありません。

欠損値を空の文字列に変換する方法はありますか?

答えて

2
Frame.mapValuesためDeedleドキュメント

、値これらの値に指定された関数を適用した結果である新たなデータフレームを構築し、だけのために適切な型に変換することができ、それらの列のマッピング関数への入力

したがって、文字列オプションではなく文字列が存在するため、マッピングは何も行われません。

私はあなたが望むものとまったく同じように思える別の機能に気付きました。

let df' = Frame.fillMissingWith "" df 

私は気づいた重要なことは、Deedleが、それはそれ自身の表現を(例えばoptionに対立するものとして)使用することを示唆し、<missing>として、これらの欠損値を示しているということでした。その知識に基づいて、ライブラリは欠けている値を操作する何らかの方法を提供すると思っていたので、私はIDEでFrame.を実行し、利用可能な関数とそのドキュメントのリストをブラウズしてAPIを調べました。

+0

ありがとうございました。私は 'float'値に' fillMissingWith'を使用しましたが、いくつかの精神的な障壁によって、私は文字列に使用することを考えなくなってしまいました。 – Soldalma

関連する問題