2016-04-23 5 views
3

私のデータフレームのTitle列の値をマップしたいと思います。私が思いついた ソリューションは、以下の通りです:1つの列の値のマップ

df.Columns.[ [ "Title"; "Amount" ] ] 
|> Frame.mapCols(fun k s -> 
    if k = "Title" 
    then s |> Series.mapValues (string >> someModif >> box) 
    else s.Observations |> Series) 

s以来、私はboxそれを、それをバック変更、stringにキャストする必要があるタイプObjectSeries<_>です。

単一の列の値をマップする推奨方法はありますか?

df.GetColumn<string>("Title") 
|> Series.mapValues(someModif) 

以上のF#のスタイルで:

答えて

2

あなたはは、GetColumnを使用することができます

df 
|> Frame.getCol "Title" 
|> Series.mapValues(string >> someModif) 
3

別のオプションはでTitleMapped列を追加することです:

df?TitleMapped <- df?Title |> Series.mapValues (...your mapping fn...) 

.. 。df |> Frame.dropCol "Title"Title列を捨ててください(そうしないと気にしません)。それが残っているかどうかは気にしない)。

それとも、あなたが<-の「imperativenessを」好きではない場合、あなたのような何かを行うことができます。

df?Title 
|> Series.mapValues (...your mapping fn...) 
|> fun x -> Frame(["Title"], [x]) 
|> Frame.join JoinKind.Left (df |> Frame.dropCol "Title") 
+0

良いオプションを選択します。この演算子は、期待どおりに動作するとは限りません。 –

+0

たとえば、次のコード:http://pastebin.com/0kjKmXwzは私に例外を与えます。なぜ私は理解できません。 –

+0

ガー!これは面倒です...うーん、 '? 'インフィックス演算子は数値の列に対してのみ機能するようです。文字列を動作させるには、pastebinの例を使用します(短く変更しましたが、 '。[" Title "]'を使用してください): 'type nPerson = {Title:string;金額:小数} let npeopleRecds = [{Title = "some";額= 51M} {タイトル= "some1";額= 28.9M} {タイトル= "some3";金額= 20M; }] (Frame.ofRecords npeopleRecds |> Frame.cols)。["Title"] |> Series.mapValues(string >>(fun s - > s.ToUpper()))> fun series - > series .Format() |> printfn "%A" ' – mt99

関連する問題