是否有一种简洁的功能方法来重命名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
构造函数可以使用它的结果?
答案 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