F# deedle cast 列数据类型

F# deedle cast column datatype

我已将 csv 文件加载到 Framedeedle 自动将一列推断为 decimal,实际上应该是 int .

我已经使用下面的行来转换为正确的类型,

df?ColumnName <- df.GetColumn<int>("ColumnName")

我想知道这是否正确。

您可以在读取 .csv 时控制列的类型。

ReadCsv(...) 有这样的参数 schema:

schema - A string that specifies CSV schema. See the documentation for information about the schema format.

可以找到更多信息here(在控制列类型部分)

示例:

.csv:

Name,Age,Comp1,Comp2
"Joe", 51, 12.1, 20.3
"Tomas", 28, 1.1, 29.3
"Eve", 2, 2.1, 40.3
"Suzanne", 15, 12.4, 26.3

F#:

let pathToCSV = "0.csv"
let schema = "Name,Age(int),Comp1,Comp2"

let loadFrame = Frame.ReadCsv(pathToCSV, schema=schema)
loadFrame.Format() |> printfn "%s"

loadFrame.ColumnTypes |> Seq.iter(printfn "%A")

打印:

     Name    Age Comp1 Comp2
0 -> Joe     51  12,1  20,3
1 -> Tomas   28  1,1   29,3
2 -> Eve     2   2,1   40,3
3 -> Suzanne 15  12,4  26,3

System.String
System.Int32
System.Decimal
System.Decimal

尽管对我来说,Frame 具有正确的列类型并且没有指定架构。

好吧,如果它适合你...,这将获取列并用指定的类型覆盖。

您还有另一种选择,即指定 CSV 文件的架构:

•inferTypes - Specifies whether the method should attempt to infer types of columns automatically (set this to false if you want to specify schema)

•inferRows - If inferTypes=true, this parameter specifies the number of rows to use for type inference. The default value is 0, meaning all rows.

•schema - A string that specifies CSV schema. See the documentation for information about the schema format.

您或许可以查看 CSV 类型提供程序文档中的 ReadCsv。