2016-12-01 39 views
9

Bir pandalar veri çerçevesine bir csv dosyası okudum ve sütunları ikili yanıtlarla evet/hayır dizelerinden 1/0 tamsayılarına dönüştürmek istiyorum. Aşağıda, bu sütunlardan birini gösteriyorum ("sampleDF" pandas dataframe).Pandas veri tabanında bir evet/hayır olan 1/0 sütununu değiştirmek için basit bir yol var mı?

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 

Yardımı çok takdir edilmiştir!

+7

'sampleDF.housing.replace (('evet', 'hayır'), (1, 0), INPLACE = True)' işi yapar – AChampion

+0

, teşekkürler! – Mushu909

cevap

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

Yukarıdaki değerler sırasıyla 1/0 olan Gerçek/Yanlış değerleri döndürür. Booleanlar toplam fonksiyonları, vb. Destekler. Eğer gerçekten 1/0 değerlere ihtiyacınız varsa, aşağıdakileri kullanabilirsiniz.

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

Bu deneyin:

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

yöntem 1

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

yöntem 2

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

yöntem 3

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

yöntem 4

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

yöntem 5

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

tüm
zamanlama

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

verilen örnek vermek

enter image description here

zamanlama
uzun bir numune döngü başına 56.2 us ±
sample = pd.DataFrame(dict(housing=np.random.choice(('yes', 'no'), size=100000)))

enter image description here

+0

Bu, derinlemesine bir cevaptır. Bunlardan bazılarını bile düşünmezdim. –

+0

Size Mutlu Noeller diliyorum! Küçük hediye (3) ve yanlış bir şey varsa çok üzgünüm! Son anlaşmazlık güzel değildi, ama gerçekten yanlış bir şey yapmıyorum, belki yakında açıklama yorumları yazabilirim ... Çok iyi şanslar ve her türlü yardım için teşekkür ederim! – jezrael

+0

Mutlu Noeller! Sorun ne olursa olsun size ve ailenize en iyisini diliyorum gerçeğini değiştirmez (-: – piRSquared

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

1,84 ms (std ortalama ±. dev.7 çalışır 1000 ilmeğin her birinin,) Belirtilen df sütun için 0 ile 1, 'bir' olan

yerine geçer 'evet' arasında.