2016-07-24 32 views
0

列を反復し、何らかの理由で1と0の反復処理 - パンダ/ Pythonの

にはいとないのを変更するためにforループを使用しようとすると、私は時に無効なタイプの比較エラーを取得していますこのしよう:無効なタイプの比較

の場合:

パンダDATAFRAMEは、そのうちの一つが、 "組み合わせ" されている

for col,row in d.iteritems(): 
    d.loc[d[col] == 'No', col] = 0 
    d.loc[d[col] == 'Yes', col] = 1 

はTypeError複数の列を持っています比較は、私は正常の問題もなく、単一の列でこれを行うことができます

d.loc[d['Combined'] == 'No', 'Combined'] = 0 
d.loc[d['Combined'] == 'Yes', 'Combined'] = 1 

実際の列名の代わりに、LOC関数にCOLの値を差し込むことはエラーをスローしない理由は?文字列に変換する必要がありますか?

+0

私にとってはうまくいっています。完全なトレースバックを共有できますか? – ayhan

+0

「d = d.replace( 'いいえ'、0).replace( 'はい'、1) ' – root

答えて

0

整数値を取る列があり、その行には「無効な比較」が必要です。だから、そのstrのインスタンスとあなたが行くのが良いかどうかを確認してください。

for col,row in d.iteritems(): 
    if isinstance(row[0], str): 
     d.loc[d[col] == 'No', col] = 0 
     d.loc[d[col] == 'Yes', col] = 1 

と同じ理由

d.loc[d['Combined'] == 'No', 'Combined'] = 0 

これは、文字列値とそのすでに列として、完璧に働いています。

+0

それは完璧に、ありがとう!これは、データフレーム内でこれらの値を変更する最適な方法ですか、それとも私が試みているよりも良い方法がありますか? – ktorquem

+0

良い方法があります...あなたがやっているのは "データの前処理"です。 Sklearnにはこの機能だけがあります。リンクを参照してください - http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html – hashcode55

+1

'isinstance(row、str)'は、行の型が直列であるためTrueを返しません。あなたはシリーズのdtypeを確認する必要があります。 – ayhan