2014-06-16 19 views
6

Verileri bir FSharp.Data.CsvProvider'dan Deedle.Frame'e geçirmeye çalışıyorum.Bir FSharp.Data.CsvProvider'dan Deedle.Frame'e veri nasıl aktarılır?

F # 'de neredeyse yeniyim ve bazı CSV dosyalarını "it-IT" den "en-US" değerine dönüştürmem gerekiyor, bu yüzden verileri kullanabilirim.

Deedle'u buldum ve nasıl kullanacağımı öğrenmek istiyorum, ancak Deedle'deki (en azından F # etkileşimli olarak basılan) bir CSV dosyasındaki verileri doğrudan dönüştüremedim.

CsvProvider'ın dönüşümü gerçekleştirdiğini farkettim, ancak birkaç gün sonra verileri iletemiyorum. Eğer bazı nedenlerden dolayı CSV tipi sağlayıcı kullanmak istiyorsanız, söz konusu

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

, şunları kullanabilirsiniz:

cevap

5

Ben Deedle ABD dışı kültürünü kullanmak CSV dosyaları ile uğraşmak gerekir inanıyoruz:

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

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

Bu, herhangi bir .NET koleksiyonundan bir veri çerçevesini oluşturur ve sütunlar gibi nesnelerin özelliklerini genişletir Frame.ofRecords kullanır. CSV sağlayıcısı verileri tupl olarak temsil eder, bu nedenle başlıkları doğru olarak adlandırmaz - ancak Frame.indexColsWith işlevi üstbilgilerin açıklığını adlandırmanızı sağlar.

+0

Teşekkür ederim Thomas. F # etkileşimde, komutu gönderirsem: frame.Rows ;; Değerlerimi, CSV dosyasında saklandıklarında olduğu gibi, ondalık ayırıcı ile "," yerine "," anlamına gelir. . Bu normal mi? –

+0

Çerçeve, dizeyi dizge olarak yüklüyor gibi görünüyor .. CSV sağlayıcısı, türün altında mı kayar? –

+0

Evet, Tomas, doğru. FSI'da frame.Rows, dosyada saklandıkları için verileri yazdırır. Frame.Rows.Values ​​içeriğini yazdırırsam değerleri doğru formda görebilirim. Yardımın için teşekkürler. –

İlgili konular