Heute gibt es wieder eine Frage aus der Community. Diesmal zum Thema Excel und wie man Spalten innerhalb einer Datei vergleichen kann.
Wie immer, erstmal zur Fragestellung:
Wie kann ich in der Spalte “Gleichheit” festhalten, ob die Spalten “Startnummer” und “Platzierung” denselben Wert enthalten?
Zuerst schreiben wir uns den Ablauf Schritt für Schritt auf:
1. Öffnen / Laden der Excel Datei.
2. Jede Zeile des Excel Arbeitsblatts durchlaufen.
3. Je Zeile die Werte in den Spalten “Startnummer” und “Platzierung” vergleichen.
4. Wenn gleich, dann schreibe “True” in die Spalte “Gleichheit”. Wenn nicht gleich, dann schreibe “False” in die Spalte “Gleichheit”.
5. Speicher / Schließe die Excel Datei.
Das sind unsere Daten in der Excel Datei:
Name | Startnummer | Platzierung | Gleichheit |
---|---|---|---|
Thomas | 76 | 52 | |
Markus | 14 | 2 | |
Jan | 77 | 77 | |
Oliver | 4 | 65 | |
Simon | 104 | 152 | |
Mario | 55 | 55 | |
Andreas | 17 | 19 |
Als Zusatz zur Fragestellung wurde gefragt, ob die Vergleichsfunktion in Pandas oder OpenPyxl zu suchen ist. Bzw. wie man am besten die Bibliotheken und Funktionen findet, die man für seinen Anwendungsfall braucht.
Erstmal finde ich super, dass überhaupt direkt so ein abstrakter Ansatz gewählt wird. Immerhin steht man immer wieder vor dem Problem “Was brauche ich eigentlich?”. Und da ein generelles Schema zu haben, an dem man sich entlang hangeln kann, ist auf jeden Fall nicht verkehrt. 😉
Wir haben also 3 Fragen:
- Mit welcher Bibliothek kann ich zwei Spalten in Excel vergleichen?
- Wie kann ich den Vergleich implementieren?
- Wie kann ich generell herausfinden, welche Bibliotheken mir bei meinem spezifischen Anwendungsfall helfen?
Am besten sehen wir uns die Fragen einzeln an.
Mit welcher Bibliothek kann ich zwei Spalten in Excel vergleichen?
Genau genommen: in keiner der Beiden.
Eine einfache “Vergleichsfunktion” kann es nicht geben, da ein Vergleich ja immer von den spezifischen Anforderungen abhängig ist. Der Vergleich selbst wird also mit Standard Python Mitteln ausgeführt. Das heißt es geht darum, welche Bibliothek ist in der Lage mir die Daten für den Vergleich aus der Excel Datei zu liefern.
Das können sowohl Pandas als auch OpenPyxl.
Wir können unser Problem also mit beiden Bibliotheken lösen. Aber was ist dann der Unterschied? Der Unterschied liegt darin, wie die beiden Bibliotheken intern arbeiten.
Pandas
Pandas steht für sich selbst und arbeitet intern mit eigenen Datenstrukturen. Den DataFrames. Deswegen muss mit Pandas die Excel Datei erst in die Pandas Struktur geladen und später auch wieder aus dieser Struktur heraus in Excel exportiert werden.
In der Folge wird eine neue Excel Datei erzeugt. Das heißt, dass zum Beispiel Formatierungen oder Meta-Informationen der originalen Excel Datei verloren gehen. Es wird eine vollkommen neue und unabhängige Datei erzeugt. Behalten wir beim Speichern denselben Namen bei, wird die Originaldatei überschrieben.
Das kann natürlich in Ordnung sein, wenn du tatsächlich nur mit den Daten arbeiten musst und keine Formeln, farbliche Markierungen oder sonstige Excel Funktionen in deiner Datei benutzt.
Auf der anderen Seite gewinnst du dadurch die Flexibilität und Macht, die Pandas mitbringt.
OpenPyxl
Mit OpenPyxl dagegen wird die bestehende Excel Datei geöffnet und bearbeitet. Formatierungen oder Meta-Informationen der originalen Excel Datei bleiben damit in der Regel erhalten. Je nach Excel Version und Funktion gibt es hier leider ein paar Einschränkungen, im Großen und Ganzen funktioniert es aber gut.
Die Frage lässt sich also nur über deinen Anwendungsfall beantworten. Brauchst du Informationen aus der Originaldatei, die über die Daten hinaus gehen, nimm OpenPyxl. Ist dir die Originaldatei egal und du brauchst nur die Daten, nimm Pandas.
Wie kann ich einen Vergleich von zwei Excel Spalten implementieren?
Pandas
import pandas as pd
# Laden der Excel-Datei in ein Pandas DataFrame
df = pd.read_excel('Datei.xlsx')
# Vergleichen der Werte in den Spalten "Startnummer" und „Platzierung“
# und Ergebnis direkt in „Gleichheit“ schreiben
df['Gleichheit'] = df['Startnummer'] == df['Platzierung']
# Speichern
df.to_excel('Datei.xlsx', index=False)
OpenPyxl
import openpyxl
# Excel Datei öffnen
workbook = openpyxl.load_workbook('Datei.xlsx')
# Arbeitsblatt auswählen
worksheet = workbook['Arbeitsblatt']
# Schleife durch jede Zeile in der Tabelle
# iter rows gibt Zellen aus Spalten zurück
for idx, row in enumerate(worksheet.iter_rows(min_row=2, values_only=True), start=2):
# Vergleichen Zeilen in den Spalten "Startnummer" und "Platzierung"
if row[1] == row[2]:
# Wenn die Werte gleich sind => "True" in die Spalte "Gleichheit"
worksheet.cell(row=idx, column=4).value = True
else:
# Wenn die Werte nicht gleich sind => "False" in die Spalte "Gleichheit"
worksheet.cell(row=idx, column=4).value = False
# Speichern
workbook.save('Datei.xlsx')
Ich persönlich finde Pandas etwas einfacher und übersichtlicher. Außerdem habe ich insgesamt einfach deutlich mehr Möglichkeiten mit Pandas. Wenn ich also nur die Daten brauche und nicht auf die Excel Datei angewiesen bin, würde ich mich immer für Pandas entscheiden. Das ist allerdings auch Geschmackssache.
Was nutzt du lieber und warum? Schreib mir gerne mal im Discord dazu!
Wie kann ich generell herausfinden, welche Python Bibliotheken mir bei meinem spezifischen Anwendungsfall helfen?
Wer darauf gehofft hat, dass es eine große “Suchmaschine” gibt, den muss ich leider enttäuschen. Na ja…. vielleicht auch nicht 😉
Wenn ich vor einem Problem stehe und überhaupt keine Ahnung habe, welche Bibliotheken ich brauche, oder ob es überhaupt welche gibt, die mir weiter helfen können, dann gibt es da inzwischen wunderbare, kostenlose Tools: ChatGPT und BingAI.
Inzwischen nutze ich persönlich lieber BingAI. ChatGPT hat ja (oder hatte?) eine veraltete Datenbasis und keinen Internetzugang. Das ist bei BingAI natürlich anders. Hier werden Websuchen im Hintergrund ausgeführt und ich habe damit immer Zugang zu den aktuellsten Daten. Durch die Quellenangaben kann ich sogar direkt auf den Originalbeitrag springen und mir jedes Detail selbst durchlesen.
Es geht gar nicht darum, über diese WERKZEUGE vollständigen, funktionstüchtigen Code zu bekommen. Es geht um einen Anhaltspunkt, Denkanstöße und die IMMENSE Zeitersparnis bei der Recherche.
Ich kann mir mehrere Beispiele erzeugen lassen, Code Teile übernehmen, in weiterführende Dokumentationen springen und mir so einfach bei der Suche viel Arbeit sparen.
Will oder muss ich dann tiefer in ein Thema einsteigen, bleibt es bei dem “alten Weg”, wie er schon immer war:
- Dokumentation lesen: Wenn eine Bibliothek interessant aussieht, nehme ich die Dokumentation und sehe nach, was sie bietet und wie es umgesetzt wird. Hierfür wird bei vielen ein “Getting started” oder “Tutorial” Bereich angeboten. Damit kann ich experimentieren.
- Beispiele suchen: In den seltensten Fällen bist du der Erste, der vor dem Problem steht. In der Regel hat irgendwer, irgendwo das Problem schon gelöst und du kannst dazu etwas im Internet finden. StackOverflow ist eigentlich immer eine gute Anlaufstelle.
- Foren und Communitys: Wenn man nichts findet, parallel suchen, oder sich etwas Zeit sparen will, sind Communitys und Foren Gold wert. Schau gerne im Discord vorbei und Feuer alle Fragen raus. 😉
- Experimentieren: Oft gibt es mehrere Wege, die ans Ziel führen können. Wie hier im Beitrag auch. Entweder nimmt man den erst besten, weil die Zeit drückt, oder man experimentiert mit mehreren und vergleicht, welcher näher an das gewünschte Ergebnis herankommt.
Du willst mehr über Python und Excel lernen? Hier findest du hier einen KOSTENLOSEN Kurs von mir. Und hier noch die YouTube Playlist, falls dir Videos lieber sind.
Dir gefallen die Tipps und Informationen und du möchtest nichts mehr verpassen? Dann schreib dich am besten sofort in den Newsletter ein und bekomme jeden neuen Beitrag direkt in deinen Posteingang geliefert!
Ansonsten wünsche ich viel Spaß beim Herumprobieren.
Bis zum nächsten Mal!
Ingo Janssen ist ein Softwareentwickler mit über 10 Jahren Erfahrung in der Leitung seines eigenen Unternehmens.
Er studierte Wirtschaftsinformatik an der TH Deggendorf und hat Softwareentwicklung an der FOM Hochschule in München unterrichtet.
Ingo hat mit einer Vielzahl von Unternehmen zusammengearbeitet, von kleinen und mittelständischen Unternehmen bis hin zu MDAX- und DAX-gelisteten Unternehmen.
Ingo ist leidenschaftlich daran interessiert, sein Wissen und seine Expertise mit anderen zu teilen. Aus diesem Grund betreibt er einen YouTube-Kanal mit Programmier-Tutorials und eine Discord-Community, in der Entwickler miteinander in Kontakt treten und voneinander lernen können.
Sie können Ingo auch auf LinkedIn, Xing und Gulp finden, wo er Updates über seine Arbeit teilt und Einblicke in die Tech-Branche gibt.
YouTube | Discord | LinkedIn | Xing | Gulp Profile