F#deedle cast column数据类型

时间:2016-03-10 07:09:37

标签: f# deedle

我已将csv个文件加载到Framedeedle会自动将一列推断为decimal,实际上该列应为int。< / p>

我使用以下行来进行正确的类型转换,

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

我想知道这是否正确。

2 个答案:

答案 0 :(得分:2)

您可以在阅读.csv。

时控制列的类型

ReadCsv(...)具有schema:

这样的参数
  

schema - 指定CSV架构的字符串。请参阅文档   有关架构格式的信息。

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

示例:

.csv:将

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class CSLab5 {
  public static void writeFile(final String filePath, final int n) throws IOException {
      String path = filePath.concat("file.txt");
           try (BufferedWriter writer = new BufferedWriter(new FileWriter(path))) {
            final String format = "%-10s %-10.1f %-10.2f %-10.3f %n";
            for(int i=1;i<=n;i++){
                final double root = Math.sqrt(i);
                writer.write(String.format(format,i+":",root ,root,root));
            }
        }
    } 
}

F#:

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

打印:

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")

虽然对我来说,Frame具有正确的列类型而没有指定架构。

答案 1 :(得分:0)

如果它适用于你......,它会获取列并覆盖指定的类型。

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

  

•inferTypes - 指定方法是否应尝试推断   列表类型自动(如果您愿意,将其设置为false)   指定架构)

     

•inferRows - 如果inferTypes = true,则此参数   指定用于类型推断的行数。默认   value为0,表示所有行。

     

•schema - 指定CSV的字符串   架构。有关架构格式的信息,请参阅文档。

您可以检查ReadCsv的CSV类型提供程序文档。