2016-08-07 13 views
0

Ich habe ein Datenframe mit Floating-Typ-Variablen, ich muss die Werte dieser Variablen auf eine n Dezimalstellen ändern. (Dummy-Daten)Wie ändere ich die Standard-Genauigkeit in Python

prod_code sales_avg 
122  12332.234233 
123  12212.234123 

Derzeit i folgendes tue:

prod_sales_avg=pd.DataFrame(weekly_sales.groupby(['prod_code']).agg({'weekly_sales':{'sales_avg':'mean'}})) 
prod_sales_avg.columns=prod_sales_avg.columns.droplevel(0) 
prod_sales_avg=prod_sales_avg.reset_index() 
prod_sales_avg['sales_avg']=round(prod_sales_avg['sales_avg'],9) 

Ich erhalte die Dezimalstellen bis zu 6 Plätze (ich denke, dass Standard ist). Ich muss die Dezimalstelle auf 9 erhöhen, aber der obige Code funktioniert nicht. Später werde ich diese Variable für den Vergleich verwenden, also nicht nur nach "display" Standpunkt suchen. Der Wert sollte als 9 Dezimalstellen gespeichert werden. Was mache ich hier falsch?

+0

verwendet, ist nicht [Dezimal] (https://docs.python.org/3.5/library/decimal.html) ein besserer Datentyp als float für feste Genauigkeit ca lkulationen? pandas Runde bezieht sich auf [numpy.around] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.around.html), was die infamously unpräzisen Floats zurückgibt ... – Aprillion

Antwort

1

Sie können es wie folgt:

über Datenrahmen mit Dataframe.round

prod_sales_avg.round({'sales_avg': 9}) 

via Series Series.round

prod_sales_avg['sales_avg'] = prod_sales_avg['sales_avg'].round(decimals=9) 
+0

irgendwie hat es nicht funktioniert. für mich sehe ich noch 6 Ziffern. Muss ich die Standardoptionen ändern? ich pd.set_option ('display.precision', 10) oben eingegeben dann funktioniert es. – Mukul

+0

Das könnte der Fall sein. Fügen Sie 'pd.set_option ('precision', 10)' nach Ihren 'import' Anweisungen hinzu. –

+1

danke Nickil +1 und akzeptierte die Antwort – Mukul