一种直接的功能方法,用于重命名Deedle数据帧的列

时间:2016-05-07 22:53:58

标签: f# deedle

是否有一种简洁的功能方法来重命名Deedle数据框f的列?

f.RenameColumns(...)是可用的,但会改变它所应用的数据框,因此使重命名操作具有幂等性是一件痛苦的事。我有类似f.RenameColumns (fun c -> ( if c.IndexOf( "_" ) < 0 then c else c.Substring( 0, c.IndexOf( "_" ) ) ) + "_renamed")的东西,这很难看。

从输入框架创建一个新框架会有什么好处,例如:Frame( f |> Frame.cols |> Series.keys |> Seq.map someRenamingFunction, f |> Frame.cols |> Series.values )但是这会被第二部分绊倒 - f |> Frame.cols |> Series.values的类型不是什么Frame构造函数所需的。

如何简洁地转换f |> Frame.cols |> Series.values以便Frame构造函数可以使用它的结果?

1 个答案:

答案 0 :(得分:1)

RenameColumns一起使用时,您可以确定其功能:

df.RenameColumns someRenamingFunction

您还可以使用Frame.mapColKeys函数。

  

构建一个新的数据框,其列是应用的结果   输入数据框的列上的指定函数。该   使用列键和对象系列调用函数   表示列数据。   Source

示例:

type Record = {Name:string; ID:int ; Amount:int}

let data = 
    [| 
        {Name = "Joe";     ID = 51; Amount = 50};    
        {Name = "Tomas";   ID = 52; Amount = 100};  
        {Name = "Eve";     ID = 65; Amount = 20};   
    |]

let df = Frame.ofRecords data

let someRenamingFunction s =
    sprintf "%s(%i)" s s.Length

df.Format() |> printfn "%s"

let ndf = df |> Frame.mapColKeys someRenamingFunction

ndf.Format() |> printfn "%s"

df.RenameColumns someRenamingFunction

df.Format() |> printfn "%s"

打印:

     Name  ID Amount
0 -> Joe   51 50
1 -> Tomas 52 100
2 -> Eve   65 20

     Name(4) ID(2) Amount(6)
0 -> Joe     51    50
1 -> Tomas   52    100
2 -> Eve     65    20

     Name(4) ID(2) Amount(6)
0 -> Joe     51    50
1 -> Tomas   52    100
2 -> Eve     65    20