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 True1.0 ve False0.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
Trueolduğu 1Python ve benzer şekilde Falseolduğ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- Trueherhangi rasgele aynı nesne olmayacaktır 1.
np.sin(True).dtypebenim 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.
boolsü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.
boolonun için yaptığı gibi sütunlar intsü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.viewBoole'yi tamsayılara dönüştürmek için kullanın :
df["somecolumn"] = df["somecolumn"].view('i1')