Probleme beim Runden (pandas.sum)

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
BlackJack

@KrachBumm: Was heisst denn sie addiert händisch wenn die Daten in Excel-Tabellen vorliegen? Sie hat sich tatsächlich Stift und Papier genommen und mehrere zehntausend Einzelwerte addiert? Und Du hast das dann auch gemacht um das Ergebnis nachzuprüfen? Das kann ich mir irgendwie nur schwer vorstellen.

Kann es sein, dass die Daten in den Tabellen doch *mehr* Nachkommastellen haben und nur 2 bzw. 3 davon *angezeigt* werden? Kannst Du statt nur das Endergebnis zu prüfen mal Zwischenergebnisse prüfen um der Abweichung auf die Spur zu kommen? Wie gesagt, diese Abweichung lässt sich mit den bisherigen Informationen *nicht* durch Gleitkommazahlen erklären. Da muss irgend ein anderer Unterschied in der Art und Weise der Berechnung existieren.
KrachBumm
User
Beiträge: 18
Registriert: Mittwoch 27. Juli 2016, 07:50

@BlackJack:

Die Daten liegen ja in Excel-Dateien vor und auch wenn ich in Excel "nur" 3 Nachkommastellen in der Zelle sehe, kann ich darin immernoch überprüfen, ob mehr Stellen vorhanden sind. Das habe ich gemacht.

Nein und natürlich hat keiner von uns beiden per Hand 400000 Werte aufsummiert. Sie hat das vorher über gegebene Excelfunktionen gemacht. Natürlich kann auch hier der Fehler liegen. Das will ich gar nicht bestreiten. Auch habe ich Zwischenergebnisse gebildet, um die Summen zu überprüfen. Diese Stimmen auch bis zu dem Punkt an dem ich den Summenbefehl von Pandas ausführe. Danach entstehen die Abweichungen.

Ich weiss langsam nicht mehr wie ich das erklären soll ^^
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

KrachBumm hat geschrieben:Die Daten liegen ja in Excel-Dateien vor und auch wenn ich in Excel "nur" 3 Nachkommastellen in der Zelle sehe, kann ich darin immernoch überprüfen, ob mehr Stellen vorhanden sind. Das habe ich gemacht.
Und was war das Ergebnis? Sind nun nur 3 Nachkommastellen im Excel oder mehr?
Btw: Pandas kann auch direkt Excel lesen.
KrachBumm
User
Beiträge: 18
Registriert: Mittwoch 27. Juli 2016, 07:50

@Sirius: In Excel sind es nur 3 bzw 2 Nachkommastellen. Und meine Kollegin möchte das auch so gerechnet haben. Ich lese auch die Excel über pandas ein, soweit bin ich auch schon gekommen ^^
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@KrachBumm: nochmal als Zusammenfassung, in Excel werden Zahlenreihen erst gefiltert und dann summiert. Wie sieht die Filterung und die Summationsformel aus?
In Pandas willst Du jetzt die selbe Filterung machen. Wie sieht da die Filterung aus?
Stimmen da die gefilterten Zahlen überein? Wie sieht die Summe ohne Filter aus?
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

KrachBumm hat geschrieben:In Excel sind es nur 3 bzw 2 Nachkommastellen. Und meine Kollegin möchte das auch so gerechnet haben. Ich lese auch die Excel über pandas ein, soweit bin ich auch schon gekommen ^^
@KrachBumm: Tabellenkalkulationen bieten zur Berechnung oft die Option "Rechne mit Genauigkeit wie angezeigt". Damit eben das selbe Ergebnis rauskommt, wie es der menschliche Buchhalter mit Bleistift und Papier ausrechnen würde. Möglicherweise nutzt ihr diese Einstellung, denn für Fakturierungen ist es wichtig mit einer festgelegten Zahl signifikanter Stellen zu rechen; für wissenschaftliche Anwendungen gilt dies eher weniger. Und mit den hardwareunterstützten Zahlenformaten, die Pandas (resp. numpy) nutzt, ist dies auch nicht möglich.

Ob dies die Größenordung der von Dir beobachteten Differenzen erklärt, ist ohne Einsicht in die Daten nicht zu eindeutig beantworten.

Aber nehmen wir einmal an, die Angaben für KWs wären auf drei Nachkommastellen genau. Dann beträgt die größte Abweichung zwischen der internen Darstellung und der angezeigten kaufmännischen Rundung 0.0005. Gehen wir von diesem Wert aus und nehmen zudem an, diese Differenz wäre für alle Werte konstant und ginge in die gleiche Richtung. Weiter nehmen wir an, Pandas würde mit der internen Genauigkeit rechen, Excel (oder Deine Kollegin) dagegen mit der Genauigkeit der angezeigten kaufmännischen Rundung. Bei 400.000 Zahlen beträgt der maximale Fehler dann 200 KW, was gemäß Deinen Angaben sogar einen Unterschied von 50.000 € ausmacht.

D.h. Deine Abweichungen sind zumindest plausibel unter der Annahme, dass Excel nur mit der angezeigten Genauigkeit rechnet, diese Daten aber ohne jede Rundung exportiert (in Deinem Fall an Pandas).

Für solche kaufmännische Berechnungen bietet Python das Modul Decimal.
BlackJack

@kbr: Naja, statt Decimal dann wohl doch eher vor dem Summieren runden. Denn das wird Excel ja sehr wahrscheinlich auch ”nur” machen. Oder rechnet das nicht mit der Gleitkommazahlenrepräsentation die vom Prozessor direkt unterstützt wird?
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

BlackJack hat geschrieben:@kbr: Naja, statt Decimal dann wohl doch eher vor dem Summieren runden. Denn das wird Excel ja sehr wahrscheinlich auch ”nur” machen. Oder rechnet das nicht mit der Gleitkommazahlenrepräsentation die vom Prozessor direkt unterstützt wird?
Das weiß ich nicht. Bei Fakturierungen im float-Format habe ich früher mit Schutzstellen gerechnet, da es ansonsten früher oder später zu Abweichungen kam. Aber auch das kann Tücken haben und die Nutzung von Decimal ist da wirklich entspannter.
BlackJack

@kbr: Aber auch deutlich langsamer. Da würde ich wahrscheinlich rechnen mit ganzen Zahlen vorziehen.
KrachBumm
User
Beiträge: 18
Registriert: Mittwoch 27. Juli 2016, 07:50

@Sirius

Ich hol jetzt mal bischen aus, damit das alles nachvollziehbar ist.

Die erste Datei die ich bekomme beinhaltet ca. 400000 Datensätze zu 20 Technikarten mit ca. 35 Spalten. Diese lese ich in ein Dataframe ein und lösche die Spalten raus, die ich nicht brauche für die Berechnung und habe dann noch 10 Spalten.

Danach erstelle ich mir anhand der Technikart 20 kleinere Dataframes je nach Technikart.

Pro Dataframe läuft dann der Filterprozess nach Bestellwert in KW und Euro und Messwert nach KW und Euro. Das ergibt vier Dataframes, die ich einzeln aufsummiere und ich einer Excel wieder ausgebe.

Die gefilterten Zahlen stimmen soweit überein.

Hier mach ich jetzt mal einen Cut!

Ich bin grade dabei die Berechnung innerhalb von Excel von meiner Kollegin nachzuvollziehen, da ich auch mit Numpy die gleichen Werte bekomme mit nur 2 bzw 3 Nachkommastellen.

Sorry, dass die Antwort jetzt so lange gedauert hat, aber ich habe mich noch mit Kollegen ausgetauscht.

Ich poste hier, ob ich den Fehler innerhalb ihrer Excel-Berechnung gefunden habe.
KrachBumm
User
Beiträge: 18
Registriert: Mittwoch 27. Juli 2016, 07:50

So,

ich habe nun wirklich alle Fehlerquellen durchsucht und es war etwas ganz anderes.

Ich hatte dubletten in meiner Zuordnungsdatei drin, was zur Dopplung von Werten geführt hat, was wiederum zur Verfälschung der Ergebnisse geführt hat. Vielen Dank nochmal an euch für eure Hilfe und eure Erläuterungen in diesem Fall.

Und sorry für die teilweise dummen Fragen von mir ;)

lg

Damian
Antworten