2016-12-01 12 views
9

私はcsvファイルをpandasデータフレームに読み込み、バイナリの回答を含む列をyes/noの文字列から1/0の整数に変換したいと考えています。以下、そのような列の1つを示します(「sampleDF」はパンダのデータフレームです)。パンダのデータフレームでyes/noの列を1/0に変更する簡単な方法はありますか?

In [13]: sampleDF.housing[0:10] 
Out[13]: 
0  no 
1  no 
2 yes 
3  no 
4  no 
5  no 
6  no 
7  no 
8 yes 
9 yes 
Name: housing, dtype: object 

大変助かりました!

+7

'sampleDF.housing.replace(( 'はい'、 'いいえ')、(1、0)、インプレース=真)'仕事をしていません – AChampion

+0

、ありがとう! – Mushu909

答えて

3
# produces True/False 
sampleDF['housing'] = sampleDF['housing'] == 'yes' 

上記の値は、本質的に1/0であるTrue/False値を返します。ブール関数はsum関数などをサポートしています。本当に1/0の値が必要な場合は、以下を使用できます。

housing_map = {'yes': 1, 'no': 0} 
sampleDF['housing'] = sampleDF['housing'].map(housing_map) 
4

これを試してください:

sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0}) 
15

方法1

sample.housing.eq('yes').mul(1) 

方法2

pd.Series(np.where(sample.housing.values == 'yes', 1, 0), 
      sample.index) 

方法3

sample.housing.map(dict(yes=1, no=0)) 

方法4

pd.Series(map(lambda x: dict(yes=1, no=0)[x], 
       sample.housing.values.tolist()), sample.index) 

方法5

pd.Series(np.searchsorted(['no', 'yes'], sample.housing.values), sample.index) 

すべて
タイミング

0 0 
1 0 
2 1 
3 0 
4 0 
5 0 
6 0 
7 0 
8 1 
9 1 

所与のサンプルを得

enter image description here

タイミング
長い試料ループあたり56.2マイクロ秒±
sample = pd.DataFrame(dict(housing=np.random.choice(('yes', 'no'), size=100000)))

enter image description here

+0

これは深い深い答えです。私はこれらのいくつかを考えていないだろう。 –

+0

私はあなたにメリークリスマスが欲しいです!小さなプレゼント(3)と何か悪いので、ごめんなさい!最後の災害は素晴らしくはありませんでしたが、実際には何か間違っていません。すぐに説明文を書くことができます。運がよかったので、すべての助けてくれてありがとう! – jezrael

+0

メリークリスマス!どのような問題でも、私はあなたとあなたの家族が一番いい( - : – piRSquared

0
%timeit 
sampleDF['housing'] = sampleDF['housing'].apply(lambda x: 0 if x=='no' else 1) 

1.84 MS(STD平均±。 dev。7回のランの、1000は、指定されたDF列の0と1とのそれぞれ)

はReplaces 'はい'、 'いいえ' をループします。

関連する問題