मेरे पास पाइथन पांडा डेटाफ़्रेम में एक स्तंभ है जिसमें बूलियन ट्रू / गलत मान हैं, लेकिन आगे की गणना के लिए मुझे 1/0 प्रतिनिधित्व की आवश्यकता है। वहाँ एक त्वरित पांडा / ऐसा करने के लिए संख्यात्मक तरीका है?
मेरे पास पाइथन पांडा डेटाफ़्रेम में एक स्तंभ है जिसमें बूलियन ट्रू / गलत मान हैं, लेकिन आगे की गणना के लिए मुझे 1/0 प्रतिनिधित्व की आवश्यकता है। वहाँ एक त्वरित पांडा / ऐसा करने के लिए संख्यात्मक तरीका है?
जवाबों:
पूर्णांक 1 या 0 के कॉलम में बूलियन मानों के एकल स्तंभ को परिवर्तित करने का एक सफल तरीका
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn
। उपयोग astype(int)
करना तब विफल हो जाएगा। एक अन्य दृष्टिकोण, जो True
False
df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)
और एक ही परिणाम प्राप्त कर सकते हैं?
बस अपने डेटाफ़्रेम को 1 से गुणा करें (int)
[1]: data = pd.DataFrame([[True, False, True], [False, False, True]])
[2]: print data
0 1 2
0 True False True
1 False False True
[3]: print data*1
0 1 2
0 1 0 1
1 0 0 1
True
है 1
पायथन में, और इसी तरह False
है 0
* :
>>> True == 1
True
>>> False == 0
True
तुम बस उन्हें इलाज के रूप में यद्यपि वे संख्या में थे, के रूप में वे द्वारा किसी भी आपरेशन आप उन पर चाहते हैं प्रदर्शन करने के लिए सक्षम होना चाहिए रहे हैं संख्या:
>>> issubclass(bool, int)
True
>>> True * 5
5
तो आपके प्रश्न का उत्तर देने के लिए, कोई काम आवश्यक नहीं है - आपके पास पहले से ही वह है जो आप खोज रहे हैं।
* ध्यान दें मैं उपयोग है एक अंग्रेजी शब्द, नहीं अजगर कीवर्ड के रूप में is
- True
किसी भी यादृच्छिक रूप में एक ही वस्तु नहीं किया जाएगा 1
।
np.sin(True).dtype
मेरे लिए फ्लोट 16 है।
df.my_column.mean()
बस ठीक कह सकता हूं (जैसा कि आप समझते हैं ), लेकिन जब मैं कोशिश करता df.groupby("some_other_column").agg({"my_column":"mean"})
हूं : मुझे मिलता है DataError: No numeric types to aggregate
, इसलिए ऐसा प्रतीत होता है कि वे हमेशा समान नहीं होते हैं । सिर्फ आपकी जानकारी के लिए।
bool
स्तंभों को बस ठीक कर सकते हैं।
TypeError: numpy boolean subtract, the
-` ऑपरेटर, को पदावनत ^
कर दिया जाता है, इसके बजाय बिटवाइज़_एक्सॉर, ऑपरेटर, या लॉजिकल_एक्सकोर फ़ंक्शन का उपयोग करें। ` @ उपयोगकर्ता के उत्तर का उपयोग करके इसे ठीक करता है।
bool
स्तंभों के लिए काम नहीं करता है क्योंकि यह int
स्तंभों के लिए करता है
आप इसे सीधे फ्रेम्स पर भी कर सकते हैं
In [104]: df = DataFrame(dict(A = True, B = False),index=range(3))
In [105]: df
Out[105]:
A B
0 True False
1 True False
2 True False
In [106]: df.dtypes
Out[106]:
A bool
B bool
dtype: object
In [107]: df.astype(int)
Out[107]:
A B
0 1 0
1 1 0
2 1 0
In [108]: df.astype(int).dtypes
Out[108]:
A int64
B int64
dtype: object
आप अपने डेटा फ़्रेम के लिए परिवर्तन का उपयोग कर सकते हैं:
df = pd.DataFrame(my_data condition)
df = df*1
Series.view
बूलियन को पूर्णांक में बदलने के लिए उपयोग करें :
df["somecolumn"] = df["somecolumn"].view('i1')