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
Zwei Exceldateinen vergleichen
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?
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
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.
Für mich sind die Zahlen mit oder ohne führende Null identisch. Mir kommt es auf den neuen Stellen nach der null an.
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
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.
Dann poste ich meinen Code und die Fehlermeldung die ich in dem Teil bekomme in dem ich vergleichen möchte.
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
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''"
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''"
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
und bezüglich logischen Operationen auf Pandas Dataframes hier https://stackoverflow.com/questions/393 ... data-frame
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
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?
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
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.
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
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
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
Was wäre meine Alternative?__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.
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
Okay da gebe ich dir recht.__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?
Gehen wir davon aus das die Daten gleich vorliegen nur in verschiedener Reihenfolge.
Wie würde ich einen solchen Vergleich anstellen.
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
@_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.
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.
-
- User
- Beiträge: 16
- Registriert: Freitag 7. September 2018, 14:00
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.
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.
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
folgt, ist ein Tupel.
Ich vermute mal, das du statt einem Tupel mit Mengen eine Menge von Tupeln willst. Also
sollte eigentlich klappen.
Die df8 und df9 sind Tupel. Alles was dem Muster
Code: Alles auswählen
x = a, b, c
Ich vermute mal, das du statt einem Tupel mit Mengen eine Menge von Tupeln willst. Also
Code: Alles auswählen
df3682927263 = set(df127183819101.values)