web-dev-qa-db-de.com

Formatieren / Unterdrücken der wissenschaftlichen Notation von Python Pandas Aggregationsergebnisse

Wie kann man das Format für die Ausgabe einer groupby-Operation in pandas erzeugen, die eine wissenschaftliche Notation für sehr große Zahlen erzeugt?

Ich weiß, wie man Strings in python formatiert, aber ich bin ratlos, wenn es darum geht, sie hier anzuwenden.

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 einen String konvertiere, aber jetzt frage ich mich nur, wie ich das Format eines Strings und Dezimalstellen hinzufüge.

sum_sales_dept.astype(str)
110
horatio1701d

Zugegeben, die Antwort, die ich in den Kommentaren verlinkt habe, 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 dies der bevorzugte Weg ist, aber es funktioniert.

Das Umwandeln von Zahlen in Zeichenfolgen aus rein ästhetischen Gründen scheint eine schlechte Idee zu sein, 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
178
Dan Allan

Hier ist eine andere Methode, ähnlich wie Dan Allans Antwort , jedoch ohne die Lambda-Funktion:

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

oder

>>> pd.set_option('display.float_format', '{:.2f}'.format)
57
tfhans

Sie können die Rundungsfunktion nur verwenden, um die wissenschaftliche Notation für einen bestimmten Datenrahmen zu unterdrücken:

df1.round(4)

oder Sie können unterdrücken, ist global durch:

pd.options.display.float_format = '{:.4f}'.format
16
Vlad Bezden

Wenn Sie die Ausgabe eines Datenrahmens in einer Jupyter-Notebook-Zelle formatieren möchten, können Sie den Anzeigestil für jeden Datenrahmen einzeln festlegen:

df = pd.DataFrame({'A': np.random.randn(4)*1e7})
df.style.format("{:.1f}")

enter image description here

Siehe die Dokumentation hier .

3
florestan

Wenn Sie die Werte verwenden möchten, z. B. als Teil von csvfile csv.writer, können Sie die Zahlen formatieren, bevor Sie eine Liste erstellen:

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