2017-09-16 3 views
3

Ich habe eine DeedleDataFrame des Typs Frame<int,string>, die einige fehlende Werte enthält. Ich möchte die fehlenden Werte in leere Strings "" konvertieren. Ich habe versucht, die valueOr Funktion zu verwenden, aber das hat nicht geholfen. Gibt es eine Möglichkeit, dies zu tun?Wie konvertiere ich fehlende Werte in Strings?

Hier ist meine 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] 

Typing df;; in FSI liefert einige Informationen einschließlich

ColumnTypes = seq [System.String; System.String];. Die Werte von df sind also vom Typ string und nicht string option. valueOr

Dies ist die Funktion:

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

I definiert eine Hilfsfunktion emptyFoo als:

let emptyFoo = valueOr "" 

Die Signatur emptyFoostring option -> string ist. Das bedeutet emptyFoo nicht an den Compiler im folgenden Befehl akzeptabel sein sollten:

let df' = Frame.mapValues emptyFoo df 

Dies ist so, weil die Werte von df Typ sind und nicht stringstring option.

Immer noch beschwert sich der Compiler nicht und der Code wird ausgeführt. df' hat jedoch immer noch einen fehlenden Wert.

Gibt es eine Möglichkeit, den fehlenden Wert in die leere Zeichenfolge zu transformieren?

Antwort

2

Die Deedle Dokumentation für Frame.mapValues:

baut einen neuen Datenrahmen, deren Werte die Ergebnisse der spezifizierten Funktion auf diesem Werten Anwendung aber nur für diejenigen Spalten, die in dem entsprechenden Typ umgewandelt werden können für Eingabe in die Abbildungsfunktion

So die Abbildung tut nichts, weil Strings, anstatt String-Optionen zu finden sind.

Ich bemerkte eine andere Funktion, die genau das zu tun scheint, was Sie wollen.

let df' = Frame.fillMissingWith "" df 

Der Schlüssel, was ich war aufgefallen, dass Deedle die fehlenden Werte als <missing> zeigt, was darauf hindeutet, dass es verwendet es eigene Darstellung ist (wie zum Beispiel option gegen). Mit diesem Wissen vermutete ich, dass die Bibliothek eine Möglichkeit bieten würde, fehlende Werte zu manipulieren. Also erforschte ich die API, indem ich in meiner IDE Frame. machte und die Liste der verfügbaren Funktionen und deren Dokumentation durchforstete.

+0

Danke. Ich habe 'fillMissingWith' für 'float'-Werte verwendet, einige mentale Hindernisse hinderten mich daran, darüber nachzudenken, sie für Strings zu verwenden. – Soldalma

Verwandte Themen