Python pandas DataFrame'de boolean True / False değerlerine sahip bir sütunum var, ancak daha fazla hesaplama için 1/0 gösterime ihtiyacım var. Bunu yapmanın hızlı bir pandalar / uyuşuk yolu var mı?
Python pandas DataFrame'de boolean True / False değerlerine sahip bir sütunum var, ancak daha fazla hesaplama için 1/0 gösterime ihtiyacım var. Bunu yapmanın hızlı bir pandalar / uyuşuk yolu var mı?
Yanıtlar:
Tek bir boole değerleri sütununu 1 veya 0 tam sayılarından oluşan bir sütuna dönüştürmenin kısa ve öz bir yolu:
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn
. Kullanmak astype(int)
daha sonra başarısız olacaktır. NaN değerlerini korurken True
1.0 ve False
0.0'a (yüzer) dönüşen başka bir yaklaşım da şu şekilde olacaktır:df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)
aynı sonucu alamaz mısınız?
Dataframe'inizi 1 (int) ile çarpmanız yeterli
[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
olduğu 1
Python ve benzer şekilde False
olduğunu 0
* :
>>> True == 1
True
>>> False == 0
True
Onların onlar, sayılar sanki sadece onları davranarak onlara istediğiniz işlemleri gerçekleştirmek mümkün olmalıdır şunlardır numaraları:
>>> issubclass(bool, int)
True
>>> True * 5
5
Yani sorunuzu yanıtlamak için hiçbir işe gerek yok - aradığınız şeye zaten sahipsiniz.
* Not I kullanımı olan İngilizce bir kelimenin, değil Python anahtar kelime olarak is
- True
herhangi rasgele aynı nesne olmayacaktır 1
.
np.sin(True).dtype
benim için float16'dır.
df.my_column.mean()
gayet iyi diyebilirim (sizin ima ettiğiniz gibi), ama denediğimde: df.groupby("some_other_column").agg({"my_column":"mean"})
Anlıyorum DataError: No numeric types to aggregate
, bu yüzden her zaman aynı DEĞİLDİR . Sadece bilginize.
bool
sütunları gayet iyi bir şekilde toplayabilirsiniz .
TypeError: numpy boolean subtract, the
-` operatörü, kullanımdan kaldırıldı, bunun yerine bitwise_xor, ^
operatörü veya logical_xor fonksiyonunu kullanın.` @ Kullanıcının cevabını kullanmak bunu düzeltir.
bool
onun için yaptığı gibi sütunlar int
sütunlar
Bunu doğrudan Frames üzerinden de yapabilirsiniz.
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
Veri çerçeveniz için bir dönüşüm kullanabilirsiniz:
df = pd.DataFrame(my_data condition)
df = df*1
Series.view
Boole'yi tamsayılara dönüştürmek için kullanın :
df["somecolumn"] = df["somecolumn"].view('i1')