पंडों ने पूर्णांक शून्य और लोगों को बूलियन में बदल दिया [डुप्लिकेट]

Nov 23 2020

मेरे पास एक डेटाफ्रेम है जिसमें 0 और 1s का एक गर्म एन्कोडेड कॉलम है जो dtype का है int32

a     b      h1      h2     h3
xy    za      0       0      1
ab    cd      1       0      0
pq    rs      0       1      0  

मैं कॉलम h1, h2 और h3 को बूलियन में बदलना चाहता हूं, इसलिए यहां मैंने किया है।

df[df.columns[2:]].astype(bool)

लेकिन इसने h1-h3 के सभी मूल्यों को बदल दिया TRUE

मैंने भी कोशिश की

df[df.columns[2:]].map({0:False, 1:True})

लेकिन वह भी काम नहीं करता है। (विशेषता: 'DataFrame' ऑब्जेक्ट में कोई विशेषता 'मैप' नहीं है)

int320 और 1s से बूलियन ( True/ False) तक डेटाफ्रेम के विशिष्ट स्तंभों को परिवर्तित करने का सबसे अच्छा तरीका क्या है ?

जवाब

2 jezrael Nov 23 2020 at 19:42

आप पहले 2 के बाद स्थिति के अनुसार सभी कॉलम चुन सकते हैं DataFrame.iloc, बूलियन में कनवर्ट कर सकते हैं और वापस असाइन कर सकते हैं:

df.iloc[:, 2:] = df.iloc[:, 2:].astype(bool)
print (df)
    a   b     h1     h2     h3
0  xy  za  False  False   True
1  ab  cd   True  False  False
2  pq  rs  False   True  False

या पहले बिना कॉलम नाम बदलने के लिए शब्दकोश बनाएं 2:

df = df.astype(dict.fromkeys(df.columns[2:], bool))
print (df)
    a   b     h1     h2     h3
0  xy  za  False  False   True
1  ab  cd   True  False  False
2  pq  rs  False   True  False
3 RuthgerRighart Nov 23 2020 at 20:07

वास्तव में एक और विकल्प है, सबसे पाइथोनिक नहीं। फिर भी मैं इसे प्रदान करूंगा, यदि आप एक चरण में बूलियन (गलत, सत्य) स्ट्रिंग (जैसे: 'कैट' बनाम 'डॉग') को बदलना चाहते हैं, तो यह उपयोगी हो सकता है:

df = pd.DataFrame({'a':['xy','ab','pq'], 'b':['za','cd','rs'], 'h1':[0,1,0], 'h2':[0,0,1], 'h3':[1,0,0]})

df = df.replace({0:False, 1:True})

डेटा प्रकार के लिए जाँच:

df.dtypes

a     object
b     object
h1      bool
h2      bool
h3      bool
dtype: object
1 Arpan Nov 23 2020 at 19:59

आप अपने दूसरे प्रयास के साथ काफी करीब थे। इसे इस्तेमाल करे

df[df.columns[2:]].applymap(bool)