Seite 1 von 1

import xlsx mit Tausender Trennzeichen

Verfasst: Freitag 5. April 2024, 06:46
von paitn
Hallo,

folgende Situation: ich habe mit Pandas Daten verarbeitet, die in folgender Form vorliegen: 1,000 ("Eintausend", mit dem Komma als Tausender Trennzeichen).
Wenn ich es in Excel importiere, habe ich die Werte als Strings vorliegen, das ganze mit einem führenden Hochkomma: '1,000
Das wiederum macht Probleme, wenn ich die Tabelle "pivotiere", hierfür benötige ich Zahlen, da summiert wird.

Der Import in Excel:

Code: Alles auswählen

        with pd.ExcelWriter(dateineu, engine='openpyxl', mode='a') as writer:
            ergebnispd.to_excel(writer, sheet_name=reiter, index=False, header=self.startzeile+1)

Wie bekomme ich nun die Zahlen mit dem richtigen Tausendertrenner ins Excel (1,000 -> 1.000) , so daß ich wieder Integer habe?
Gibt es hier vielleicht etwas in openpyxl? Ich meine, daß es in xlswriter etwas zur Formatierung gab.

Grüße,
Michael

Re: import xlsx mit Tausender Trennzeichen

Verfasst: Freitag 5. April 2024, 07:10
von Sirius3
Das Problem ist, dass Du bereits in ergebnispd Strings hast. Woher kommt dieses Dataframe?

Re: import xlsx mit Tausender Trennzeichen

Verfasst: Freitag 5. April 2024, 09:09
von paitn
Das Dataframe kommt auch aus einer Excel Datei:

Code: Alles auswählen

    def xlsxlesen(self, datei):
        xlsxdf = pd.read_excel(datei, engine='openpyxl', header=self.startzeile, dtype={'A': int, 'B': int}) # type, damit xlsx-Format
...aber interessanter Punkt. Am besten versuche ich die entsprechende Spalte "O" auch als Integer aus der Excel zu holen:

Code: Alles auswählen

dtype={'A': int, 'B': int, 'O': int}

Re: import xlsx mit Tausender Trennzeichen

Verfasst: Montag 8. April 2024, 13:45
von paitn
Folgendermaßen geschieht die Umwandlung.

Nettowert ist die Spalte mit den Fließkommazahlen, es werden die Dezimalstellen weggenommen und das Tausendertrennzeichen hinzugefügt:

Code: Alles auswählen

ergebnispd['Nettowert'] = ergebnispd['Nettowert'].map('{:,.0f}'.format) 
Vor dieser Umwandlung hat ein Datenfeld den Typ:
<class 'numpy.float64'> # Da passt es noch
danach hat es den Typ
<class 'str'>

Wie bekomme ich nun float64 -> integer?!

Re: import xlsx mit Tausender Trennzeichen

Verfasst: Montag 8. April 2024, 13:50
von Sirius3
Gar nicht, du läßt die Umwandlung in str einfach weg. Excel kennt nur Kommazahlen. Warum möchtest Du das denn umwandeln?

Re: import xlsx mit Tausender Trennzeichen

Verfasst: Montag 8. April 2024, 13:58
von paitn
Die Zahlen wandern in eine Pivot und da ist es übersichtlicher, wenn statt 1243245 -> 1.243.245 steht.
Insofern war die Idee, die Basistabelle entsprechend zu formatieren.

Re: import xlsx mit Tausender Trennzeichen

Verfasst: Montag 8. April 2024, 14:31
von __deets__
Ist das dann nicht einfach eine Frage der Formatierung in der Pivottabelle? Als Feld-Format, *nicht* Format der eigentlichen Daten.

Re: import xlsx mit Tausender Trennzeichen

Verfasst: Montag 8. April 2024, 14:46
von paitn
Scheinbar!
Ich hab's nun hinbekommen, daß es in der Basistabelle korrekt formatiert ist, aber in der Pivot ist es immer noch Kraut und Rüben.
Mit openpyxl habe ich es hinbekommen:

Code: Alles auswählen

wb = op.load_workbook(datei)      
ws = wb[reiter]
col = ws['O']
        for i in col:
            i.number_format = "#,##0"