###前提・実現したいこと
毎度お世話になります。
あるデータフレームの特定の列を変換テーブルを利用して別の文字列に置き換える,
ということがしたいです。
具体的には次のとおりです。
まず,下記のような対象となるデータがあるとします。
// 対象のデータ Id hoge 0 956567041061059 huga1 1 756567041061059 huga2 2 111111111111111 huga3
Id列の文字が比較的長い整数であることが特徴です。
このId列を次の「変換テーブル」の”serial_num”列をを参照して,別の名前に変えたいと思っています。
(hoge列は今回は関係ありません)
// 変換テーブル serial_num No name 0 956567041061059 1 matu 1 756567041061059 2 take 2 656567041061059 3 ume
「対象のデータ」1行目の”Id”が の「変換テーブル」1行目の”serial_num”と一致しているので,「対象のデータ」1行目の”Id”に「変換テーブル」1行目の”name”の"matu"を代入します。
同じく「対象のデータ」2行目の”Id”が の「変換テーブル」2行目の”serial_num”と一致しているので,「対象のデータ」1行目の”Id”に「変換テーブル」1行目の”name”の"take"を代入します。
「対象のデータ」の三行目の”111111111111111”のように「変換テーブル」に存在しない文字列は”null”に変換したいと思っています。
変換後は次のようになります。
// 変換後のデータ Id hoge 0 matu huga1 1 take huga2 2 null huga3
###試したこと
こんな感じのコードを書いてみました。
python
1import pandas as pd 2 3 4df = pd.DataFrame({ 'Id' : [956567041061059,756567041061059,656567041061059], 5 'hoge' : ["huga1","huga2","huga3"], # この列は関係ない 6 }) 7 8table = pd.DataFrame({ 'No' : [1,2,3], 9 'serial_num' : [956567041061059,756567041061059,656567041061059], 10 'name' : ["matu","take","ume"], 11 }) 12 13def change(val): 14 # ここらへんが怪しい 15 dff = pd.DataFrame( 16 table[ table['serial_num']==int(val)] 17 ) 18 name_ = dff.ix[0,2] 19 # ここまでが怪しいので”null”に変換するコードが実装できていない 20 return name_ 21 22df['Id'] = df['Id'].apply(change)
型が一致していないのか「KeyError: 0」とでてしまいます。
無理やりStringにしてみたり,intにしてみたりと色々試してみましたが,イマイチよく分かりません。
ぜひともご教示いただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/13 04:35