पंडों ने पूर्णांक शून्य और लोगों को बूलियन में बदल दिया [डुप्लिकेट]
मेरे पास एक डेटाफ्रेम है जिसमें 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 के बाद स्थिति के अनुसार सभी कॉलम चुन सकते हैं 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
वास्तव में एक और विकल्प है, सबसे पाइथोनिक नहीं। फिर भी मैं इसे प्रदान करूंगा, यदि आप एक चरण में बूलियन (गलत, सत्य) स्ट्रिंग (जैसे: 'कैट' बनाम 'डॉग') को बदलना चाहते हैं, तो यह उपयोगी हो सकता है:
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
आप अपने दूसरे प्रयास के साथ काफी करीब थे। इसे इस्तेमाल करे
df[df.columns[2:]].applymap(bool)