2017-07-04 19 views
1

Professional Status ActivityProfessional Status Activity Typeの数値のデータフレーム値を置き換えようとしていますが、その前にmapの各値がthrの小文字の値と比較されていることを確認しますDF列Professionalステータスアクティビティ最初の行に= Full Time Employedは、それを小文字と比較した場合例えば :データフレームと、マップ内の値がない場合は、だから、これは私が必要とするロジックです= 2Pandasが小文字に置き換えられます。その他のオプション[Python]

mapping_dict = { 
    "Professional Status Activity": { 
     "full time employed": 1, 
     "pension": 1, 
     "student": 2, 
     "part time employed": 2, 
     "other": 2, 
     "unemployed": 3 

    }, 
    "Professional Status Activity Type":{ 
     "civil servant": 1, 
     "judge": 1, 
     "army officer": 1, 
     "worker": 2, 
     "insurance officer": 2, 
     "notary": 2, 
     "lawyer": 2, 
     "consultant": 3, 
     "chief l": 3 
    } 
} 

df = df.replace(mapping_dict) 

価値を置きます地図オブジェクトにフルタイムで採用されているので、結果は地図から1になります。 df列のプロフェッショナルステータスアクティビティの最初の行= Something not have in mapの結果は2

+1

[最小、完全で、検証可能な例](https://stackoverflow.com/help/mcve)を提供できますか? – Tbaki

答えて

0

となりますので、質問は完全にはっきりしておらず、最小限の完全な例が役立ちます。しかし、私はあなたがこのような何かをしたいと思う:

df["status"].apply(lambda x: mapping_dict["Professional Status Activity"].get(x.lower(),2)) 

(あなたは、実際のデータフレームの例を与えられていないので、私は"status"呼ばれてきた)とそれぞれに機能を適用する。これは、あなたのデータフレームのカラムに通してgows素子。最初に要素の.lower()を呼び出し、文字列を小文字に変換します。次に、を使用してmapping_dictから"Professional Status Activity" dictにあるこの値をチェックします。 Getはデフォルト値を指定することができます。この場合は2に設定されているので、キーが辞書にない場合は2になります。

この変換済みバージョンで列を置き換える場合は、あなたはそうするでしょう

df["status"] = df["status"].apply(lambda x: mapping_dict["Professional Status Activity"].get(x.lower(),2)) 
+0

他の場合のmapからの同じ戻り値returnが2であれば値が存在するかどうか単純チェック。 'full time employed' ==' Full Time Employed'は地図から他の1つを 'full time employ' ==' Full Employed 'それは等しい戻り値ではない@ –

+0

@VladimirDjukicそれは私の答えがあなたを助けるべきである - .get()を使ってマップからの値を返します(小文字のバージョン)、それ以外の場合は2を返します。あなたが必要とするものではない? – LangeHaare

+0

エラー 'AttributeError:' float 'オブジェクトに属性' lower''がありません –

関連する問題