Seite 1 von 2

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 08:30
von 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.

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 08:52
von KrachBumm
@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 ^^

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 08:58
von Sirius3
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.

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 09:05
von KrachBumm
@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 ^^

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 09:33
von Sirius3
@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?

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 10:46
von kbr
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.

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 10:57
von 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?

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 11:09
von kbr
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.

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 11:26
von BlackJack
@kbr: Aber auch deutlich langsamer. Da würde ich wahrscheinlich rechnen mit ganzen Zahlen vorziehen.

Re: Probleme beim Runden (pandas.sum)

Verfasst: Dienstag 9. August 2016, 12:00
von KrachBumm
@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.

Re: Probleme beim Runden (pandas.sum)

Verfasst: Donnerstag 11. August 2016, 14:22
von KrachBumm
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