fbpx

­čÜÇ Code-Quicky: Excel Spalten vergleichen

Inhalt
    Add a header to begin generating the table of contents

    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:

    NameStartnummerPlatzierungGleichheit
    Thomas7652
    Markus142
    Jan7777
    Oliver465
    Simon104152
    Mario5555
    Andreas1719

    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!

    Picture of Ingo Jan├čen

    Ingo Jan├čen

    Lerne nicht einfach programmieren. L├Âse Probleme und automatisiere Aufgaben!

    Das k├Ânnte dich auch interessieren

    Nach oben scrollen
    Newsletter Popup Form

    Keine Inhalte mehr verpassen?

    Melde dich direkt f├╝r den "Code-Kompass" an und erhalte n├╝tzliche Tipps und Informationen direkt in deinen Posteingang.