import xlsx mit Tausender Trennzeichen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Benutzeravatar
paitn
User
Beiträge: 15
Registriert: Montag 4. Juni 2018, 09:32

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
Sirius3
User
Beiträge: 17761
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Problem ist, dass Du bereits in ergebnispd Strings hast. Woher kommt dieses Dataframe?
Benutzeravatar
paitn
User
Beiträge: 15
Registriert: Montag 4. Juni 2018, 09:32

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}
Benutzeravatar
paitn
User
Beiträge: 15
Registriert: Montag 4. Juni 2018, 09:32

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?!
Sirius3
User
Beiträge: 17761
Registriert: Sonntag 21. Oktober 2012, 17:20

Gar nicht, du läßt die Umwandlung in str einfach weg. Excel kennt nur Kommazahlen. Warum möchtest Du das denn umwandeln?
Benutzeravatar
paitn
User
Beiträge: 15
Registriert: Montag 4. Juni 2018, 09:32

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ist das dann nicht einfach eine Frage der Formatierung in der Pivottabelle? Als Feld-Format, *nicht* Format der eigentlichen Daten.
Benutzeravatar
paitn
User
Beiträge: 15
Registriert: Montag 4. Juni 2018, 09:32

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"
Antworten