2016-03-18 21 views
1

Bir DataFrame'de okuduğum, insanların sıralarını ve eğitim düzeylerini (diğer şeylerin yanı sıra) içeren bir e-tablom var.Python Pandas çıktısı çıktı DataFrame sözlüğe

3 ondalık basamağa yuvarlanmış göreli frekanslar içeren bir sözlük döndürmeye çalışıyorum.

return self.data['education'].value_counts(normalize=True).round(3) 

döner

BA/BS  0.458 
Some Col 0.250 
PostGrad 0.167 
High Sch 0.125 
Name: education, dtype: float64 

ama

return self.data['education'].value_counts(normalize=True).round(3).to_dict() 

döner

{u'High Sch': 0.125, u'BA/BS': 0.45800000000000002, u'PostGrad': 0.16700000000000001, u'Some Col': 0.25} 

Sadece etrafta flummoxed bundan değilim. Olanlara biraz ışık tutabilir mi?

+1

yuvarlama sadece çıkışını etkiler ve temel türü olduğunu gibi görünüyor bir hata olabilir hala yüzer, böylece küçük kesirli parçayı sürdürebilirsin, olası bir çözüm 'self.data ['eğitim'] yapmaktır. value_counts (normalize = Doğru) .round (3) .astype (str).to_dict() 'ancak bu değerleri tırnaklara – EdChum

cevap

1

bu deneyin:

pd.options.display.float_format = '{:,.3f}'.format 
0

np.round Eğer öyle düşündüğün yapmaz.

Örneğin bu çalıştırın:

3.1230000000000002 

np.round yuvarlak numarası (3.123) yakın bir şekilde temsil dönüşürken edilir ve en yakın bir yapabileceği döner

np.round(3.1231,3) 

olan sahip olduğu doğrulukla yukarıda gördüğünüz sayıdır (3.123000000000000002)

Örneğinizde ne görüyorsanız, nesneyi aradığınızda,

pd.Series, çıktıda bazı kırpıntılar gerçekleştiriyor.

my_s = pd.Series([3.123,2], index=['a','b']) 
my_s 

baskılar

a 3.123 
b 2.000 
dtype: float64 

ama my_s [a] diğer cevap da anlaşılacağı şekilde,

3.1230000000000002 

Ne yapmak istediğiniz numaranın temsilini biçimlendirmek için yazdırır.

0

MaxU'nun yanıtı yazdırma için çalışır ancak to_dict kullanıldığında hiçbir şey değişmez.

my_s = pd.Series([0.12345,0.45678], index=['a','b']) 
my_s = my_s.apply(lambda x: '{:,.3%}'.format(x)) 

bu verir:

Bu

ben bu sorunu çözmek için kullandık ne

my_s.to_dict() 
{'b': '45.678%', 'a': '12.345%'}