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)
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
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)
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
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}")
Siehe die Dokumentation hier .
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()