Ausgabe unterschiedliche Präzision bei der Spalte mit den pandas.DataFrame.to_csv()?
Frage
Ist es möglich, an eine float-Präzision, die speziell für jede Spalte gedruckt werden soll, indem Sie das Python - pandas
Paket-Methode pandas.DataFrame.to_csv?
Hintergrund
Wenn ich eine pandas
dataframe, angeordnet ist, wie dies:
In [53]: df_data[:5]
Out[53]:
year month day lats lons vals
0 2012 6 16 81.862745 -29.834254 0.0
1 2012 6 16 81.862745 -29.502762 0.1
2 2012 6 16 81.862745 -29.171271 0.0
3 2012 6 16 81.862745 -28.839779 0.2
4 2012 6 16 81.862745 -28.508287 0.0
Gibt es die float_format
option kann verwendet werden, um anzugeben, a Präzision, aber das passt, die Präzision in allen Spalten der dataframe, wenn gedruckt.
Wenn ich mich so:
df_data.to_csv(outfile, index=False,
header=False, float_format='%11.6f')
Bekomme ich die folgende, wo vals
gegeben ist eine ungenaue Präzision:
2012,6,16, 81.862745, -29.834254, 0.000000
2012,6,16, 81.862745, -29.502762, 0.100000
2012,6,16, 81.862745, -29.171270, 0.000000
2012,6,16, 81.862745, -28.839779, 0.200000
2012,6,16, 81.862745, -28.508287, 0.000000
- und was willst du als Ausgabe? lats und lange, mit 6 Ziffern und vals mit 1?
- Oops... die Festsetzung mein Beispiel. Ja, für dieses Beispiel, aber ich hoffe, dass dies für andere Daten-sets, die mit unterschiedlichen Stufen der Genauigkeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies mit
to_string
. Es ist einformatters
argument, wo man einen dict-Spalten-Namen, um Formatierer. Dann können Sie einige regexp-ersetzen der Spalte Standard-Separatoren mit Ihrem Trennzeichen der Wahl..to_string()
Methode lediglich konvertiert die df eine verkettete Zeichenfolge auf mein Ende. Ich kann nicht sehen, wie kann man das senden der Ausgang dieses.to_csv()
.to_string()
sollte in der Lage sein, alles zu tun, dass.to_csv()
tut.TypeError: to_csv() got an unexpected keyword argument 'formatters'
.to_csv()
all das tun können.to_string()
tut. Trotzdem versuchte ich.to_string()
und die Ergebnisse in einer einzigen Zeichenfolge mit multi-space-Separatoren. Ich bin wahrscheinlich der convert-to-string-Typ-Spalten-vor-to_csv route für meine Arbeit.Ändern Sie den Typ der Spalte "vals" vor dem Export der Daten-frame in eine CSV-Datei
lambda x: '%2.1f % x if not pd.isna(x) else ''
Mehr aktuelle version von hknust die erste Zeile wäre:
Drucken ohne wissenschaftliche notation:
Können Sie Runde Methode für dataframe vor dem speichern des dataframe auf die Datei.
Den
to_string
vorgeschlagenen Ansatz von @mattexx sieht besser zu mir, da es nicht ändern Sie den dataframe.Es auch verallgemeinert auch bei der Verwendung von
jupyter
notebooks ziemlich die HTML-Ausgabe, über dieto_html
Methode. Hier setzen wir einen neuen Standard-Genauigkeit von 4, und setzen Sie es um alle 5 Ziffern für eine bestimmte Spaltewider
:formatters
argument ist nicht verfügbar fürdf.to_csv
- Funktion...