You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#/F#中,如何更高效地从DataFrameRow数组初始化DataFrame?

更简洁的DataFrameRow数组转DataFrame实现方式

你可以直接按列维度构建DataFrame,无需先初始化再追加行,代码更简洁且避免额外操作:

let columns =
    // 从第一行提取所有列名
    dfRows[0].GetValues() |> Seq.map (fun x -> x.Key)
    |> Seq.map (fun colName ->
        // 收集所有行中当前列的所有值
        let values = dfRows |> Array.map (fun row -> row.GetValue(colName).Value)
        // 根据值类型创建对应类型的DataFrame列
        match values[0] with
        | :? DateTime -> DateTimeDataFrameColumn(colName, values |> Array.map (fun v -> v :?> DateTime)) :> DataFrameColumn
        | :? int -> Int32DataFrameColumn(colName, values |> Array.map (fun v -> v :?> int)) :> DataFrameColumn
        | :? single -> SingleDataFrameColumn(colName, values |> Array.map (fun v -> v :?> single)) :> DataFrameColumn
        | :? double -> DoubleDataFrameColumn(colName, values |> Array.map (fun v -> v :?> double)) :> DataFrameColumn
        | :? bool -> BooleanDataFrameColumn(colName, values |> Array.map (fun v -> v :?> bool)) :> DataFrameColumn
        | :? string -> StringDataFrameColumn(colName, values |> Array.map (fun v -> v :?> string)) :> DataFrameColumn
        | v -> failwith $"不支持的列 \"{colName}\" 类型: {v.GetType()}"
    )

// 直接用列集合初始化完整DataFrame
let df = DataFrame(columns)

该方案的优势

  • 逻辑连贯:一步完成DataFrame构建,无需拆分初始化和追加两个步骤
  • 性能更优:避免Append操作带来的额外内存开销(数据量越大越明显)
  • 结构清晰:从列维度处理数据,更贴合DataFrame的存储逻辑

如果使用的是F# DataFrame最新版本,还可以尝试框架提供的静态构造方法(若支持直接从DataFrameRow数组创建),但上述方法兼容性更强,适用于多数版本。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:31:14