针正火框

Deedle normalize frame

如何对deedle frame中的数据进行归一化?

我已经尝试过这种方法,但一个不起作用

 let iris = Frame.ReadCsv("./iris.csv")
 let keys = iris.ColumnKeys |> Seq.toArray
 let x = iris.Columns.[keys.[0..4]]
 let mu = x |> Stats.mean 
 let std = x |> Stats.stdDev
 //Not working becasue couldnt substract series from frame 
 let norm = (x - mu) / std

frame - series 重载期望您从 frame 的所有列中减去 series,即帧的行键和系列的行键对齐.

对于您的用例,您需要对齐列键 - 对此没有单一的运算符,但您可以使用 mapRows 函数来实现:

let x = iris.Columns.[keys.[0..3]]
let mu = x |> Stats.mean 
let std = x |> Stats.stdDev

let norm = 
  x 
  |> Frame.mapRowValues (fun r -> (r.As<float>() - mu) / std)
  |> Frame.ofRows

我还将您的 x 更改为仅来自 keys.[0..3],否则您将尝试规范化 string 类型的列,但失败了。