2014-06-16 11 views
6

Ich versuche, Daten von einem FSharp.Data.CsvProvider an einen Deedle.Frame zu übergeben.Wie übergeben Sie Daten von einem FSharp.Data.CsvProvider an einen Deedle.Frame?

Ich bin fast neu in F #, und ich muss einige CSV-Dateien von Kultur "IT-IT" zu "en-US" konvertieren, damit ich die Daten verwenden kann.

Ich habe Deedle gefunden, und ich möchte lernen, wie man es benutzt, aber ich konnte nicht direkt die Daten von einer CSV-Datei in Deedle konvertieren (zumindest was in F # interaktiv gedruckt wird).

Ich bemerkte, dass der CsvProvider die Konvertierung durchführt, aber nach einigen Tagen der Versuche bin ich nicht in der Lage, die Daten zu übergeben.

Antwort

5

Ich glaube, dass Deedle Lage sein sollten, mit CSV-Dateien, die nicht-US-Kultur zu beschäftigen verwenden:

let frame = Frame.ReadCsv("C:\\test.csv", culture="it-IT") 

Das heißt, wenn Sie die CSV-Typ-Anbieter aus irgendeinem Grund verwenden möchten, können Sie:

let cs = new CsvProvider<"C:/data/fb.csv">() 

cs.Rows 
|> Frame.ofRecords 
|> Frame.indexColsWith cs.Headers.Value 

Dies verwendet Frame.ofRecords, die einen Datenrahmen aus jeder .NET Sammlung erstellt und erweitert die Eigenschaften der Objekte als Spalten. Der CSV-Provider stellt Daten als Tupel dar, daher werden die Header nicht korrekt benannt. Mit der Funktion Frame.indexColsWith können Sie jedoch die Header explizit benennen.

+0

Danke, Thomas. In F # interaktiv, wenn ich den Befehl: frame.Rows ;; Ich habe die Werte genauso wie sie in der CSV-Datei gespeichert sind, ich meine mit Dezimaltrennzeichen als "," statt "." . Es ist normal? –

+0

Das klingt wie der Rahmen lädt das Datum als Zeichenfolgen .. Soll der CSV-Provider unter dem Typ float sein? –

+0

Ja, Tomas, es ist richtig. In FSI gibt frame.Rows Daten so aus, wie sie in der Datei gespeichert sind. Wenn ich den Inhalt von frame.Rows.Values ​​drucke, kann ich die Werte in der richtigen Form sehen. Danke für Ihre Hilfe. –