Hallo, ich hab da mal ne Frage. Ich hab da schon einiges Probiert, bin aber nicht weitergekommen.
Fakten:
Ich habe 2 Tabellen die jeweils unterschiedliche sowie auch gleich Spaltenbezeichnungen haben und auch unterschiedlich lang sind. Desweiteren ist die 1. Spalte beider Tabellen eine ID. In beiden Tabellen gibt es gleiche und unterschiedliche IDs.
bsp.
Tabelle1/Datei1
V1 V2 V3 V4 V5
ID1 aa nn zz ii
ID2 ss rr oo ll
ID4 qq mm öö pp
ID5 nn vv bb xx
...
...
Tabelle2/Datei2
V1 V2 V3 V4 V5 V6
ID1 aa nn zz ii 45
ID3 ff xx yy tt 45
ID4 qq mm öö pp 45
ID6 uu kk nn ff 45
ID7 qq ww ee rr 45
...
...
Das Problem ist nun:
Nach einer bestimmten Tabelle sollen die IDs gemerged werden, so das dann von allen IDs in der einen Tabelle die Spalten herausgefiltert werden, die auch in der anderen anderen Tabelle vorhanden sind. Die einzelnen Zeilen sollen quasi aktualisiert werden. Hier werden ID1 und ID4 aus Tabelle 1 "aktualisiert".
Bsp. Ergebniss:
V1 V2 V3 V4 V5 V6
ID1 aa nn zz ii 45
ID2 ss rr oo ll
ID4 qq mm öö pp 45
ID5 nn vv bb xx
...
...
Zum Schluss müssten dann jeweiles die Zeilen angeben werden (komplett) die nicht mit gemerged wurden. Das heisst die nur in Tabelle 1 vorhanden waren und andersherum die nur in Tabelle 2 vorhanden waren. Vlt auch noch mir Zeilenanzahl,
z.B.
45 Zeilen wurden nicht gemerged in Tabelle 1:
ID2 ss rr oo ll
ID5 nn vv bb xx
...
30 Zeilen wurden nicht gemerged in Tabelle 2:
ID3 ff xx yy tt 45
ID6 uu kk nn ff 45
ID7 qq ww ee rr 45
...
Hat da einer ne Idee womit ich das am besten realisieren kann? Die Tabellen können übrigens einige tausend Zeilen lang sein.
2 Dateien/Tabellen mergen/vergleichen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was denn so? Ansätze?Chibi hat geschrieben:Ich hab da schon einiges Probiert, bin aber nicht weitergekommen.
Grundsätzlich ist das Modul `numpy` geeignet, um mit Matrizen-artigen Daten umzugehen. Allerdings ist es eher auf Zahlen und das Rechnen damit ausgelegt. Aber es mag dennoch nützlich sein; ich kenne mich damit nicht so aus.
Das hier musst Du noch mal präzise erklären:
Wird hier eine neue Tabelle erstellt oder Tabelle 1 nur mit Daten aus Tabelle 2 erweitert? Wie wird das definiert? Wie wird definiert, welche IDs aktualisiert werden sollen? Wie werden leere Attribute repräsentiert? Kann es solche überhaupt geben?Chibi hat geschrieben: Das Problem ist nun:
Nach einer bestimmten Tabelle sollen die IDs gemerged werden, so das dann von allen IDs in der einen Tabelle die Spalten herausgefiltert werden, die auch in der anderen anderen Tabelle vorhanden sind. Die einzelnen Zeilen sollen quasi aktualisiert werden. Hier werden ID1 und ID4 aus Tabelle 1 "aktualisiert".
Bsp. Ergebniss:
V1 V2 V3 V4 V5 V6
ID1 aa nn zz ii 45
ID2 ss rr oo ll
ID4 qq mm öö pp 45
ID5 nn vv bb xx
...
...
Ich könnte mir vorstellen, dass man `collections.namedtuple` hier nutzen könnte.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ergänzend nachgefragt: Welche Attribute werden denn übernommen? Werden alle Attribute aus beiden Tabellen übernommen? (Aus Deinem Beispiel würde ich das schließen, aber oben im Text schreibst Du etwas von "Tabellen haben gleiche und verschiedene Spaltenbezeichnungen".
Was würde mit
passieren?
Würden alle Attribute übernommen?
In Deinem Beispiel hatte Tabelle 2 ja einfach eine Spalte mehr - hier haben beide Tabellen eine Spalte, die die jeweils andere Tabelle nicht hat.
Wie wird entschieden, welcher Wert aus einer Spalte, die bei beiden Tabellen vorhanden ist, übernommen wird? Im Beispiel: Welche Werte der Spalten V3 und V4 stehen im Resultat? (das könnte sich an meine obige Frage anschließen / korreliert sein, ob eine neue Tabelle erstellt, oder eine bestehende erweitert wird).
Was würde mit
Code: Alles auswählen
Tabelle 1:
KEY V2 V3 V4
... .. .. ..
Tabelle 2:
KEY V3 V4 V5
... .. .. ..
Würden alle Attribute übernommen?
Code: Alles auswählen
Tabelle Merged:
KEY V2 V3 V4 V5
Wie wird entschieden, welcher Wert aus einer Spalte, die bei beiden Tabellen vorhanden ist, übernommen wird? Im Beispiel: Welche Werte der Spalten V3 und V4 stehen im Resultat? (das könnte sich an meine obige Frage anschließen / korreliert sein, ob eine neue Tabelle erstellt, oder eine bestehende erweitert wird).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- noisefloor
- User
- Beiträge: 4187
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
@Chibi: sind die Daten in deinen Tabellen zeilenweise oder spaltenweise organisiert? Die sprichst von Zeilen mergen aber Daten spaltenweise vergleichen...
Gruß, noisefloor
@Chibi: sind die Daten in deinen Tabellen zeilenweise oder spaltenweise organisiert? Die sprichst von Zeilen mergen aber Daten spaltenweise vergleichen...
Gruß, noisefloor
@ Hyperion
Es wird die Tabelle 2 an Tabelle 1 gemerged, es entsteht keine neue Tabelle! Nur eine "Aktualisierung" der Tabelle 1
Wie wird das definiert? Wie wird definiert, welche IDs aktualisiert werden sollen?
Wie werden leere Attribute repräsentiert? Kann es solche überhaupt geben?
Es wird einfach geschaut ,ob die ID in der ersten Spalte, gleich ist! Ist sie gleich, werden alle Spalten aktualisiert/angehängt, die auch in Tabelle 2 vorhanden sind. (Tabelle 1 hat z.B. 5 Spalten und Tabelle 2 = 6), also müssen alle Zeilen in Tabelle 1 dann später auch eine 6.Spalte bekommen und gibt es in Tabelle 1 fehlende Daten (werden immer mit NA gekennzeichent) werden diese mit den entsprechenden Daten aus Tabelle 2 ersetzt. Und ja, es kann auch fehlende Daten geben
z.B. Tabelle1/Datei1
V1 V2 V3 V4 V5
ID1 aa nn zz ii
ID2 ss NA NA ll
ID4 qq mm öö pp
ID5 nn vv NA xx
@ noisefloor
Ich denke Zeilenweise organisiert und müssen halt anhand der ID in der ersten Spalte verglichen werden, so meinte ich das.
@all
sry für die blöde Beschreibung
Wird hier eine neue Tabelle erstellt oder Tabelle 1 nur mit Daten aus Tabelle 2 erweitert?Wird hier eine neue Tabelle erstellt oder Tabelle 1 nur mit Daten aus Tabelle 2 erweitert? Wie wird das definiert? Wie wird definiert, welche IDs aktualisiert werden sollen? Wie werden leere Attribute repräsentiert? Kann es solche überhaupt geben?
Es wird die Tabelle 2 an Tabelle 1 gemerged, es entsteht keine neue Tabelle! Nur eine "Aktualisierung" der Tabelle 1
Wie wird das definiert? Wie wird definiert, welche IDs aktualisiert werden sollen?
Wie werden leere Attribute repräsentiert? Kann es solche überhaupt geben?
Es wird einfach geschaut ,ob die ID in der ersten Spalte, gleich ist! Ist sie gleich, werden alle Spalten aktualisiert/angehängt, die auch in Tabelle 2 vorhanden sind. (Tabelle 1 hat z.B. 5 Spalten und Tabelle 2 = 6), also müssen alle Zeilen in Tabelle 1 dann später auch eine 6.Spalte bekommen und gibt es in Tabelle 1 fehlende Daten (werden immer mit NA gekennzeichent) werden diese mit den entsprechenden Daten aus Tabelle 2 ersetzt. Und ja, es kann auch fehlende Daten geben

z.B. Tabelle1/Datei1
V1 V2 V3 V4 V5
ID1 aa nn zz ii
ID2 ss NA NA ll
ID4 qq mm öö pp
ID5 nn vv NA xx
@ noisefloor
Ich denke Zeilenweise organisiert und müssen halt anhand der ID in der ersten Spalte verglichen werden, so meinte ich das.
@all
sry für die blöde Beschreibung

- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Keine Ahnung, ob ich das abschließend wirklich alles verstanden habe, aber hier mal etwas auf die Schnelle. Die Ausgabeformatierung muss man ggf. noch verbessern:
Link
Link
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert