我想映射数据框的Title
列的值。
我想出的解决方案如下:
df.Columns.[ [ "Title"; "Amount" ] ]
|> Frame.mapCols(fun k s ->
if k = "Title"
then s |> Series.mapValues (string >> someModif >> box)
else s.Observations |> Series)
由于s
类型为ObjectSeries<_>
,我必须将其转换为string
,然后将其修改为box
。
是否有建议的方法来映射单个列的值?
答案 0 :(得分:3)
另一种选择是添加TitleMapped
列:
df?TitleMapped <- df?Title |> Series.mapValues (...your mapping fn...)
...然后将Title
列与df |> Frame.dropCol "Title"
一起扔掉(如果您不关心它是否保留,则不要理会。)
或者,如果您不喜欢<-
的“强制性”,您可以执行以下操作:
df?Title
|> Series.mapValues (...your mapping fn...)
|> fun x -> Frame( ["Title"], [x] )
|> Frame.join JoinKind.Left (df |> Frame.dropCol "Title")
答案 1 :(得分:1)
您可以使用GetColumn:
df.GetColumn<string>("Title")
|> Series.mapValues(someModif)
或者更多F#风格:
df
|> Frame.getCol "Title"
|> Series.mapValues(string >> someModif)
答案 2 :(得分:0)
在某些情况下,您可能希望映射特定列的值,并将该映射列保留在框架中。假设我们有一个名为someFrame的框架,该框架有2列(Col1和Col2),并且我们要转换Col1(例如Col1 + Col2),我通常要做的是:
someFrame
|> Frame.replaceCol "Col1"
(Frame.mapRowValues (fun row ->
row.GetAs<float>("Col1") + row.GetAs<float>("Col2"))
someFrame)
如果要创建新列而不是替换它,您要做的就是更改“ addCol”的“ replaceCol”方法,并为该列选择一个新名称,而不是给定示例的“ Col1” 。我不知道这是否是最有效的方法,但到目前为止它对我还是有用的。