我已将csv
个文件加载到Frame
,deedle
会自动将一列推断为decimal
,实际上该列应为int
。< / p>
我使用以下行来进行正确的类型转换,
df?ColumnName <- df.GetColumn<int>("ColumnName")
我想知道这是否正确。
答案 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类型提供程序文档。