2014-07-23 121 views
1

我需要在Deedle中加载许多CSV文件。问题在于它们格式不正确,因为第一行有8列,但其余数据有7列。 我试图加载它们在Deedle中,将“hasHeader”选项设置为true,将“inferTypes”设置为false并传递模式,但由于第一行我总是出错。Deedle:如何加载格式不正确的CSV文件?

有一种方法可以说Deedle跳过一行或多行?

感谢

回答

2

一般情况下,根据文档,这应该工作(为csv文件有三列,不管有多少在报头中提供):

let data = Frame.ReadCsv("sample.csv", hasHeaders=false, schema="R1,R2,R3") 

但我相信有一个忽略schema参数的错误。因此,我认为唯一的解决办法就是使用Stream和手动忽略文件的第一行:

using (File.OpenRead("sample.csv")) (fun file -> 
    while file.ReadByte() <> 10 do() 
    let data = Frame.ReadCsv(stream=file, schema = "R1,R2,R3", hasHeaders=true) 
    // ... 
) 

这对于样本文件的工作原理:

Row1,Row2,Row3,Row4 
1,2,3 
a,b,c 
+0

什么是'StreamReader'呢? – Daniel

+0

@丹尼尔,好点,它是从以前的尝试。我已将其删除。 –

+0

@KonradKokosa,谢谢你的回答。我试图实现你的代码片断,但缺少一些东西,我是F#和.NET的新手。请,你能建议我缺少什么,或在哪里寻找解决方案?谢谢。 –