2016-12-01 6 views
9

मैंने एक सीएसवी फ़ाइल को पांडा डेटाफ्रेम में पढ़ा है, और कॉलम को बाइनरी उत्तरों के साथ हां/नहीं के तारों से 1/0 के पूर्णांक में कनवर्ट करना चाहते हैं। नीचे, मैं ऐसे कॉलम में से एक दिखाता हूं ("नमूना डीएफ" पांडा डेटाफ्रेम है)।क्या पांडस डेटाफ्रेम में हां/नहीं 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), inplace = सच)' – AChampion

+0

यही काम करता है, धन्यवाद! – Mushu909

उत्तर

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

उपरोक्त रिटर्न सही/गलत मूल्य जो क्रमशः 1/0 क्रमशः हैं। बूलियन योग कार्यों का समर्थन करते हैं, आदि। यदि आपको वास्तव में 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 μs
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 एमएस (एसटीडी ± मतलब है। देव।7 रन, 1000 छोरों प्रत्येक)

के स्थान पर df कॉलम का उल्लेख के लिए 0 के साथ साथ 1, 'नहीं' 'हां' का।

संबंधित मुद्दे