【问题标题】:FSharp.Data extract a subset of columns from a CsvFile and write to new fileFSharp.Data 从 CsvFile 中提取列的子集并写入新文件
【发布时间】:2019-10-29 06:40:36
【问题描述】:

在 F#(使用 FSharp.Data 的问题)中,如何从 CsvFile 中提取列的子集?

例如,假设我有一个csv文件file1.csv

a, b, c, d
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12

如果想阅读,只保留ab 列,然后将它们写入新的 csv 文件。我希望使用类似Map:

let originalCsvFile = CsvFile.Load("file1.csv")
let subset = originalCsvFile.Map(fun row -> <get columns a and b>) ... write to file("file2.csv")

但不知道我应该使用什么fun,也不知道如何写入新文件。

我可以从 fun 应该返回 CsvRow 的类型中看到,但我无法比这更进一步。

【问题讨论】:

  • 一个可重复的最小示例将帮助人们回答。
  • 查看here,了解如何从加载的 CSV 文件中提取数据的示例。
  • 我认为,如果您再次使用您添加的新说明重新发布问题,那么它将不会再次关闭 - 您添加了足够的细节,现在很清楚您在问什么(但是,唉,我无法回答封闭的问题...)。
  • 缺少最后一个投票以重新打开此投票
  • 嗯,希望这会在某个时候重新开放......我们得到了投票。

标签: f# f#-data


【解决方案1】:

CsvProvider 支持“内联”模式规范。拥有两种文件类型后,您可以将 file1 行映射到 file2 行,创建一个新的 File2 实例并将新行保存到文件中:

open FSharp.Data

type File1 = CsvProvider<"file1.csv">
type File2 = CsvProvider<"a,b", Schema = "int,int">

let rows =
    File1.Load("file1.csv").Rows
    |> Seq.map(fun r -> File2.Row(r.A, r.B))
let f2 = new File2(rows)
f2.Save("file2.csv")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多