pandas to_csv argumente float_format und dezimal funktionieren nicht für die Indexspalte

10

Hintergrund

Ich mache ein paar Simulationen resp. eine Systemanalyse durch Variieren von Parametern (in diesem Fall nur rpm ) und Anhängen jeder letzten Zeile eines Ergebnisdatenrahmens results_df an einen zusammenfassenden Datenrahmen df , der das Baviour meines Systems in Abhängigkeit von der variierten rpm enthält.

Um einen geeigneten Index für Plotting und Datenanalyse zu erhalten, habe ich die verschiedenen Werte (hier rpm ) aus der Liste in eine Pandas-Serie ser konvertiert und diese Serie mit dem zusammenfassenden Datenrahmen df mit den Ergebnissen versehen Ich interessiere mich für.

Da die Ergebnisse jeder Berechnung, die mich interessiert, nur die letzte Zeile jeder Berechnung ist, entziehe ich diese Daten aus dem Ergebnisdatenrahmen results_df , indem ich .tail(1) verwende.

Was ich bisher gemacht habe, wird im folgenden Ausschnitt gezeigt:

%Vor%

Problem

Diese csv-Datei, die ich bekomme, hat das folgende Format:

%Vor%

Ich erwartete jedoch drei Dezimalziffern und ein Komma als Dezimalzeichen für meine Indexspalte, wie hier gezeigt:

%Vor%

So scheint es, dass die Optionen index und decimal nicht auf die Indexspalte angewendet werden, wenn Datenrahmen mit dem Befehl .to_csv in csv-Dateien exportiert werden.

Wie kann ich dieses Verhalten erreichen, da die Option index auf True gesetzt ist und alle Werte (mit Ausnahme der Indexspalte) das richtige Format und Dezimalzeichen haben?

Muss ich die Indexspalte irgendwie getrennt behandeln?

    
albert 23.07.2015, 11:34
quelle

1 Antwort

15

Ich würde Ihre zwei unteren Zeilen umschreiben:

%Vor%

In

%Vor%

Dies ist ein bisschen eine Umgehung, aber wie Sie bemerkt haben, arbeiten die Schlüsselwortargumente decimal= und float_format= nur auf Daten Spalten, nicht auf dem Index.

Stattdessen setze ich den Index in den Datenrahmen mit reset_index und sage dann to_csv(index=False , den Index nicht in der Datei zu speichern (da er jetzt in den Daten enthalten ist).

Auch das Öffnen eines Dateistreams ( with open('foo.csv', 'w') as f: ) ist besser für Pandas bestimmt, was das selbst macht, wenn Sie ihm einfach eine Zeichenfolge 'foo.csv' als erstes Argument geben.

    
firelynx 23.07.2015, 12:05
quelle