Seite 1 von 2

Zwei Exceldateinen vergleichen

Verfasst: Freitag 7. September 2018, 14:10
von Saar-Pfalz666
Hallo zusammen,
Ich bin der neue ;)
Ich hab jetzt ein paar Stunden verzweifelt versucht 2 Excel Datein miteinander zu vergleichen. Hier muss ich nur wissen ob alle Datensätze die in Datei A stehen auch denen aus Datei B und C entsprechen. Also B und C sollten zusammen alles enthalten was in A steht.
Dann kommt noch ein Problem mit der Formatierung dazu.
Datei B sieht so aus:

Nummer
12345678910

Datei A entspricht diesem Format :
Nummer
012345678910

Also müssten bei Datei A in der Datenreihe Nummer immer noch eine 0 vor die Ziffer gestellt werden.

Der Vergleich soll in Datei B und C alle Werte ausgeben die nicht in A vorhanden sind und bin Datei A alles zu dem kein Gegenstückin Datei B und C auffindbar war.

Ich hoffe das ich mein Problem gut Schildern konnte.

P.s
Alle Dateien Panda wurde initialisiert und alle Tabellen geladen.

Liebe Grüße

Re: Zwei Exceldateinen vergleichen

Verfasst: Freitag 7. September 2018, 15:09
von Sirius3
Ich verstehe das Problem mit der führenden 0 nicht. Sind das Zeichenketten und keine Zahlen? Und soll A und B verschieden sein, weil das eine eine 0 hat und das andere nicht, oder sollen die trotz der 0 als gleich gelten?

Re: Zwei Exceldateinen vergleichen

Verfasst: Freitag 7. September 2018, 15:16
von Saar-Pfalz666
In der .xls sind die führenden 0 vorhanden. Habe in Excel auch die Formatierung der Zellen schon geändert im Text Zahl oder sogar Sonderformatierung aber es funktioniert nicht.

Für mich sind die Zahlen mit oder ohne führende Null identisch. Mir kommt es auf den neuen Stellen nach der null an.

Re: Zwei Exceldateinen vergleichen

Verfasst: Freitag 7. September 2018, 17:17
von Sirius3
Was funktioniert nicht? Zeig doch mal den Code, den Du schon hast, und wo Du Probleme hast.

Re: Zwei Exceldateinen vergleichen

Verfasst: Freitag 7. September 2018, 21:47
von Saar-Pfalz666
Kann ich leider erst am Montag, da ich den Rechner jetzt nicht bei mir hab.

Dann poste ich meinen Code und die Fehlermeldung die ich in dem Teil bekomme in dem ich vergleichen möchte.

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 16:05
von Saar-Pfalz666
So hier mein Code:

import pandas as pd

daten1 = pd.read_excel('Tabelle1.xls')
daten2 = pd.read_excel('Tabelle2.xls')
daten3 = pd.read_excel('Tabelle3.xls')
set.symmetric_difference(daten1^daten2)

Dazu kommt dann aus "set.symmetric_difference(daten1^daten2)"
"TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''"

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 18:39
von ThomasL
Bezüglich symmetric_difference schau mal hier https://www.programiz.com/python-progra ... difference
und bezüglich logischen Operationen auf Pandas Dataframes hier https://stackoverflow.com/questions/393 ... data-frame

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 19:34
von Saar-Pfalz666
ThomasL hat geschrieben: Montag 10. September 2018, 18:39 Bezüglich symmetric_difference schau mal hier https://www.programiz.com/python-progra ... difference

Danke, ich glaub aber es liegt irgendwo daran das ich die funktion nicht im DataFrame anwenden kann. Bekomme hier die Fehlermeldung ... AttributeError: 'DataFrame' object has no attribute 'symmetric_difference'

Das Problem mit der Führenden "0" habe ich gelöst bekommen. Irgendwie ging beim Import der Datentyp verloren. Hab jetzt alle Typen als object geladen. Kann das zu Problemen führen?

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 19:37
von Saar-Pfalz666
Ich sollte noch erwähnen das die Tabellen sich vom Aufbau etwas unterscheiden. Also möchte ich in der Tabelle B+C irgendwo die Werte finden aus Tabelle A und nur sehen welche Werte aus Tabelle A nirgends in Tabelle B + C zu finden sind.

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 19:43
von Sirius3
Um Mengenoperationen durchzuführen brauchst Du erstmal Mengen. Und wenn die Dateien verschieden aufgebaut sind, dann mußt Du erstmal die relevanten Daten in die selbe Form bringen.

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 20:03
von __blackjack__
@Saar-Pfalz666: Wenn Du alles als `object` in den `DataFrame` lädst, dann frage ich mich warum Du das in einen `DataFrame` lädst. Zumal es ja anscheinend auch um Zahlen geht.

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 20:21
von Saar-Pfalz666
Sirius3 hat geschrieben: Montag 10. September 2018, 19:43 Um Mengenoperationen durchzuführen brauchst Du erstmal Mengen. Und wenn die Dateien verschieden aufgebaut sind, dann mußt Du erstmal die relevanten Daten in die selbe Form bringen.
Die Form sollte einigermaßen passen. Das Problem ist das die Daten nicht in der selben Reihenfolge auftreten. Ich kann auch nicht sicher sagen wie sie auftreten werden.

Die Funktion des Codes sollte am Schluss so sein, das ich 1 Master-File hab die sich mit 2 anderen vergleicht. Ganz egal wie die Daten in diesen Tabellen stehen. Es soll nur geprüft werden ob es ein gleiches Paar gibt.

So sehen die Ausgangsdaten in Excel aus:
TTNR Bezeichnung Startbestand Endbestand Zugänge Abgänge Endprodukt Durchschnittsbestand DLZ SummeBestand SummeAbgang Stufendurchschnitt Disponent Start Ende Tage
WW00R00 FORPART/ 236 90 0 146 4459 152,71 32,425 22125,978 56572 12,12446649 HCB 01.07.2018 31.07.2018 31

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 20:22
von Saar-Pfalz666
__blackjack__ hat geschrieben: Montag 10. September 2018, 20:03 @Saar-Pfalz666: Wenn Du alles als `object` in den `DataFrame` lädst, dann frage ich mich warum Du das in einen `DataFrame` lädst. Zumal es ja anscheinend auch um Zahlen geht.
Was wäre meine Alternative?

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 20:46
von __blackjack__
@Saar-Pfalz666: Um ein Problem lösen zu können muss man es exakt beschreiben können. So etwas wie „Ich kann auch nicht sicher sagen wie sie auftreten werden.“ kann darauf hindeuten das man es nicht automatisiert lösen kann. Denn wenn Du das nicht weisst, und auch nicht exakt beschreiben kannst wie man es herausfinden kann wenn man total dämlich ist, denn das sind Rechner, wie soll der Rechner das Problem dann lösen?

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 20:53
von Saar-Pfalz666
__blackjack__ hat geschrieben: Montag 10. September 2018, 20:46 @Saar-Pfalz666: Um ein Problem lösen zu können muss man es exakt beschreiben können. So etwas wie „Ich kann auch nicht sicher sagen wie sie auftreten werden.“ kann darauf hindeuten das man es nicht automatisiert lösen kann. Denn wenn Du das nicht weisst, und auch nicht exakt beschreiben kannst wie man es herausfinden kann wenn man total dämlich ist, denn das sind Rechner, wie soll der Rechner das Problem dann lösen?
Okay da gebe ich dir recht.
Gehen wir davon aus das die Daten gleich vorliegen nur in verschiedener Reihenfolge.
Wie würde ich einen solchen Vergleich anstellen.

Re: Zwei Exceldateinen vergleichen

Verfasst: Montag 10. September 2018, 21:08
von __blackjack__
@Saar-Pfalz666: Kommt ein bisschen darauf an was „vergleichen“ genau bedeutet. Wenn man wissen möchte ob die genau gleich sind, bis auf die Reihenfolge, dann kann man einfach beide Seiten des Vergleichs in die gleiche Reihenfolge bringen, also sortieren, und dann vergleichen. Wenn man wissen möchte wie die sich unterscheiden, sind Mengenoperationen ein Werkzeug.

Re: Zwei Exceldateinen vergleichen

Verfasst: Dienstag 11. September 2018, 15:19
von Saar-Pfalz666
@_blackjack_ hab’s mir jetzt gerade nochmal angesehen. In der einen Datei sind mehr Zeilen als in der anderen.
Ich möchte nun die Zeilen finden die es nur in Datei1 gibt.
Dabei reicht es mir auch nur einzelne Spalten zu vergleichen, da es hier auch irrelevante Werte gibt.

Re: Zwei Exceldateinen vergleichen

Verfasst: Dienstag 11. September 2018, 18:53
von Sirius3
Dann packst Du die relevanten Spalten von Datei2 oder 3 am besten in ein Set, damit der Vergleich einfach wird und gehst alle Zeilen in Datei1 durch, und vergleichst, ob sie im Set sind.

Re: Zwei Exceldateinen vergleichen

Verfasst: Dienstag 11. September 2018, 20:13
von Saar-Pfalz666
import pandas as pd

import numpy as np

df1 = pd.read_excel('data.xls', 'Sheet1', na_values=['NA'], dtype=object)
df2 = pd.read_excel('hcc.xls', 'Sheet1', na_values=['NA'], dtype=object)
df3 = pd.read_excel('hck.xls', 'Sheet1', na_values=['NA'], dtype=object)

df4 = df2.append(df3, ignore_index=True)

df1.sort_values(by=['TTNR'])

df4.sort_values(by=['TTNR'])

df6 = df1.values

df7 = df4.values

df8 = set(df1.TTNR), set(df1.Abgänge), set(df1.Startbestand), set(df1.Zugänge), set(df1.Endbestand), set(df1.DLZ), set(df1.Durchschnittsbestand), set(df1.SummeBestand), set(df1.SummeAbgang), set(df1.Stufendurchschnitt), set(df1.Disponent)

df9 = set(df4.TTNR), set(df4.Abgänge), set(df4.Startbestand), set(df4.Zugänge), set(df4.Endbestand), set(df4.Durchlaufzeit), set(df4.Durchschnittsbestand), set(df4.SummeBestand), set(df4.SummeAbgang), set(df4.Stufendurchschnitt), set(df4.Disponent)

df8^df9

Da stecke ich jetzt fest und bekomme immer wieder eine Fehlermeldung (TypeError: unsupported operand type(s) for ^: 'tuple' and 'tuple'). Hab schon etliches versucht mittlerweile und mich durch unzählige Beiträge gelesen.

Das zwischen drin verwirrt vielleicht (df.values) und war nur ein Test ob es mit arrys funktioniert.

Re: Zwei Exceldateinen vergleichen

Verfasst: Dienstag 11. September 2018, 20:38
von __deets__
Bitte gewöhn dir mal sofort ab, Variablen durchzunummerieren. Das kann niemand anderes lesen und verstehen. Und niemand anderes bist auch du in 2 Wochen.

Die df8 und df9 sind Tupel. Alles was dem Muster

Code: Alles auswählen

x  = a, b, c
folgt, ist ein Tupel.

Ich vermute mal, das du statt einem Tupel mit Mengen eine Menge von Tupeln willst. Also

Code: Alles auswählen

df3682927263 = set(df127183819101.values)
sollte eigentlich klappen.