49

Wie kann man das Format für die Ausgabe von einer Gruppe ändern, indem man in Pandas wissenschaftliche Notation für sehr große Zahlen erzeugt. Ich weiß, wie man String-Formatierung in Python macht, aber ich bin ratlos, wenn es darum geht, es hier anzuwenden.Formatierung/Unterdrückung der wissenschaftlichen Notation von Python-Pandas-Aggregationsergebnissen

df1.groupby('dept')['data1'].sum() 

dept 
value1  1.192433e+08 
value2  1.293066e+08 
value3  1.077142e+08 

Dies unterdrückt die wissenschaftliche Notation, wenn ich in String konvertieren, aber jetzt bin ich nur fragen, wie Format-String und Dezimalzahlen hinzuzufügen.

sum_sales_dept.astype(str) 
+1

möglich Duplikat ([in Pandas wissenschaftliche Schreibweise unterdrücken?] http://stackoverflow.com/questions/17737300/suppressing-scientific-notation-in-pandas) –

+3

Ich sah diese Frage, aber ich bin mir nicht sicher, wie das mir hilft. Ich versuche nur, den aktuellen dtype zu erhalten, der float ist, und zeige einfach alle Dezimalstellen im Ergebnis anstelle der wissenschaftlichen Notation an. – horatio1701d

+0

Das ist wahrscheinlich nur eine Display-Sache. Aber wenn Sie denken, dass etwas von Ihrem Problem sich von dem in Dans Link unterscheidet, dann müssen Sie mehr Informationen über Ihr Problem veröffentlichen, vorzugsweise mit einem kleinen Datensatz, der das Problem reproduziert. Und was sind die 'dtypes' für dein Ergebnis? – TomAugspurger

Antwort

90

Zugegeben, die Antwort, die ich in den Kommentaren verlinkte, ist nicht sehr hilfreich. Sie können Ihren eigenen String-Konverter wie folgt angeben.

In [25]: pd.set_option('display.float_format', lambda x: '%.3f' % x) 

In [28]: Series(np.random.randn(3))*1000000000 
Out[28]: 
0 -757322420.605 
1 -1436160588.997 
2 -1235116117.064 
dtype: float64 

Ich bin mir nicht sicher, ob das der bevorzugte Weg ist, dies zu tun, aber es funktioniert.

Konvertieren von Zahlen in Strings rein aus ästhetischen Gründen scheint wie eine schlechte Idee, aber wenn Sie einen guten Grund haben, ist dies eine Möglichkeit:

In [6]: Series(np.random.randn(3)).apply(lambda x: '%.3f' % x) 
Out[6]: 
0  0.026 
1 -0.482 
2 -0.694 
dtype: object 
+0

Dang. Das hat mir solche Probleme bereitet, als ich in eine CSV-Datei geschrieben habe. Dies half einem Haufen. Setzen Sie das Format von float, erstellen Sie eine neue Spalte als String anhängend "A" + str (Spalte), exportieren Sie nach csv Das schließlich alle Ziffern auf einer 18-stelligen Zahl in CSV gehalten. – JJFord3

+0

Danke Dan. Weißt du, wie man Pandas Optionen zurücksetzt? – Josh

+0

Danke Dan. Kannst du mir sagen, wie man die Zahlen richtig anordnet? – Outlier

14

Hier ist eine andere Art und Weise tun, fast ähnlich wie die Weg oben:

pd.options.display.float_format = '{:.2f}'.format 
Series(np.random.randn(3)) 
0

Wenn Sie die Werte verwenden möchten, sagen als Teil csvfile csv.writer können die Zahlen vor dem Erstellen einer Liste formatiert werden:

df['label'].apply(lambda x: '%.17f' % x).values.tolist() 
2

können Sie rund Funktion nur wissenschaftliche Schreibweise für bestimmten Datenrahmen zu unterdrücken:

df1.round(4) 

oder Sie können global unterdrücken:

pd.options.display.float_format = '{:.4f}'.format 
Verwandte Themen