Schreiben von floats via pandas to_csv unf float_format

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
alti23
User
Beiträge: 11
Registriert: Dienstag 29. März 2011, 12:56

Hallo zusammen,

ich möchte eine csv via pandas und df.to_csv erstellen.Einige Spalten nehmen float-Werte mit teilweise reichlich Nachkommastellen auf. Um das Format dieser floats festzulegen, nutze ich den Parameter float_format.
In der csv sollen die Daten später NICHT in wissenschaftlicher Notation vorlegen, und genau so viel Nachkommastellen anzeigen, wie tatsächlich für den jeweiligen Wert notwendig sing.

z.B.:
1.112233445566778899 => 1.112233445566778899
0.123 => 0.123

Problem:
float_format='%f' für dazu, dass max 6Nachkommastellen im csv landen, 1.112233445566778899 => 1.112233
float_format='%.15f' für dazu, dass immer 15Nachkommastellen im csv landen, also 0.123 => 0.123000000000000.

Wie kann da eine Lösung aussehen?

Gruß alti23
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@alti23: Was ist denn Deine Definition von „genau so viel Nachkommastellen anzeigen, wie tatsächlich für den jeweiligen Wert notwendig“? Wie viele Nachkommastellen sind denn für 0,1 notwendig?

Code: Alles auswählen

In [1]: format(0.1, ".60f")                                                     
Out[1]: '0.100000000000000005551115123125782702118158340454101562500000'
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist nicht vorgesehen, man will ja keine Zahlen mit hunderten 0en.
alti23
User
Beiträge: 11
Registriert: Dienstag 29. März 2011, 12:56

Die Floats, wie in meinem Beispiel oben, stammen so aus einer via Pandas eingelesen xls und sollen genauso im csv landen.
Erzwingt man via float_format die wissenschaftliche Notation, kommt auch was brauchbares raus, also:

0.112233445566778899 => 1.112233445566778899e-01
0.123 => 1.23e-01

Gruß alti23
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@alti23: was ist Dein Ziel? Was willst Du mit der csv-Datei machen?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@alti23: Ich würde sagen das was Du willst ist nicht möglich und würde Dich noch mal bitten die Frage aus meinem letzten Beitrag zu beantworten.

Format-Informationen werden aus der Tabellenkalkulationsdatei nicht ausgelesen, nur die Werte.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
alti23
User
Beiträge: 11
Registriert: Dienstag 29. März 2011, 12:56

Danke für Eure Hilfe. Ich habe das Problem jetzt so gelöst, dass beim einlesen via dtype=object die Werte als Text gelesen gelesen und gespeichert werden. So landet's dann auch korrekt in der csv.

Gruß alti23
Antworten