Spalteneinträge in großen Datensätzen vergleichen & entsprechende Zeilen löschen
Verfasst: Dienstag 22. August 2023, 15:39
Hallo,
ich bin bei der Bearbeitung eines großen Datensatzes auf ein Problem gestoßen. Es handelt sich hierbei um einen Datensatz aus Excel mit der Größe 40.000x60.
Der Code für meine Zwecke liegt bereits in VBA vor, jedoch dauert die Ausführung mehrere Stunden (verständlicherweise).
Ich würde dies nun gern in Python optimieren.
Erst einmal der Code in VBA:
Info: Der Datensatz hat in der ersten Zeile einen Header.
Es wird praktisch jede Zeile mit 'X' markiert, bei der bei aufeinanderfolgenden Zeilen die Spalteneinträge in Spalte 2 und 7 jeweils gleich sind. Anschließend wird händisch jede Zeile gelöscht, die kein 'X' enthält. (War in VBA einfacher umzusetzen)
Hier möchte ich auch optimieren, sodass direkt jede Zeile gelöscht wird, wenn die Spalteninhalte aus Spalte 2 und 7 bei mind. 2 aufeinanderfolgenden Zeilen gleich sind.
Was ich bis jetzt gemacht habe:
Ich habe die Datei eingelesen und erst einmal alle Zeilen gelöscht, in denen in Spalte 7 kein Eintrag war.
Ich hatte mich nun gefragt, welche Methoden die kürzeste Laufzeit haben. Eventuell ein Array mit Numpy erstellen?
Über jegliche Gedanken wäre ich sehr dankbar.
ich bin bei der Bearbeitung eines großen Datensatzes auf ein Problem gestoßen. Es handelt sich hierbei um einen Datensatz aus Excel mit der Größe 40.000x60.
Der Code für meine Zwecke liegt bereits in VBA vor, jedoch dauert die Ausführung mehrere Stunden (verständlicherweise).
Ich würde dies nun gern in Python optimieren.
Erst einmal der Code in VBA:
Code: Alles auswählen
Sub Liste()
Z = 3
counter = 0
With Workbooks("Beispiel.xlsx").Sheets(1)
Do Until .Cells(Z, 2) = ""
If .Cells(Z, 2) = .Cells(Z - 1, 2) And .Cells(Z, 7).Text = .Cells(Z - 1, 7).Text Then
.Cells(Z, 11) = "x"
.Cells(Z - 1, 11) = "x"
End If
Z = Z + 1
Loop
End With
End Sub
Es wird praktisch jede Zeile mit 'X' markiert, bei der bei aufeinanderfolgenden Zeilen die Spalteneinträge in Spalte 2 und 7 jeweils gleich sind. Anschließend wird händisch jede Zeile gelöscht, die kein 'X' enthält. (War in VBA einfacher umzusetzen)
Hier möchte ich auch optimieren, sodass direkt jede Zeile gelöscht wird, wenn die Spalteninhalte aus Spalte 2 und 7 bei mind. 2 aufeinanderfolgenden Zeilen gleich sind.
Was ich bis jetzt gemacht habe:
Ich habe die Datei eingelesen und erst einmal alle Zeilen gelöscht, in denen in Spalte 7 kein Eintrag war.
Code: Alles auswählen
import pandas as pd
# Öffnen der Arbeitsmappe
df = pd.read_excel('Testpy.xlsx', engine='openpyxl')
df_mod = df.copy()
df_mod.dropna(subset=['EQUIPMENT_NUMBER'], inplace=True)
df_mod.reset_index(drop=True,inplace=True)
print(df_mod)
Über jegliche Gedanken wäre ich sehr dankbar.