2014-06-16 24 views
6

Próbuję przekazać dane z FSharp.Data.CsvProvider do Deedle.Frame.Jak przekazać dane z FSharp.Data.CsvProvider do Deedle.Frame?

Jestem prawie nowy w F # i muszę przekonwertować niektóre pliki CSV z kultury "it-IT" na "en-US", więc mogę korzystać z danych.

Znalazłem Deedle i chcę się nauczyć, jak go używać, ale nie byłem w stanie bezpośrednio przekonwertować danych z pliku CSV w Deedle (przynajmniej jest to, co jest wydrukowane w F # interaktywne).

Zauważyłem, że CsvProvider dokonuje konwersji, ale po kilku dniach prób nie mogę przekazać danych.

Odpowiedz

5

wierzę, że Deedle powinien być w stanie radzić sobie z plików CSV, które używają non-US Kultura:

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

Powiedział, że jeśli chcesz używać dostawcy typu CSV z jakiegoś powodu, można użyć:

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

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

używa Frame.ofRecords która tworzy ramkę danych z każdej kolekcji .NET i rozszerza właściwości obiektów, jak kolumny. Dostawca CSV reprezentuje dane jako krotki, więc nie nazywa się poprawnie nagłówków - ale funkcja Frame.indexColsWith pozwala nazwać eksplozję nagłówków.

+0

Dziękuję, Thomas. W F # interaktywny, jeśli wyślę polecenie: frame.Rows ;; Mam wartości w taki sam sposób, jak są one przechowywane w pliku CSV, mam na myśli separator dziesiętny jako "," zamiast "." . Jest to normalne? –

+0

Wygląda na to, że ramka ładuje datę jako ciągi znaków. Czy dostawca CSV pod typem float? –

+0

Tak, Tomas, zgadza się. W FSI, frame.Rows drukuje dane, gdy są przechowywane w pliku. Jeśli wydrukuję zawartość ramki.Rows.Values, widzę wartości we właściwej formie. Dziękuję za pomoc. –

Powiązane problemy