Datenvorbereitung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
11819587
User
Beiträge: 2
Registriert: Sonntag 28. Januar 2024, 09:13

Hallo,

ich arbeite aktuell an einem Programm, welches mir Helfen soll, meine Datensätze zu ordnen und in weiterer Folge auszuwerten. Ich habe aktuell ein Programm (siehe unten), welches das Output Excel Dokument von meinem Analysen Gerät bearbeitet um meine Messwerte besser dazustellen.

Folgende Aktionen sollen gemacht werden:

1. EInlesen des .xlsx Dokuments
2. Löschen einiger Zeilen und Spalten

Mein bisheriger Code, welcher bereits wunderbar funktioniert.

Code: Alles auswählen

import pandas as pd
import os

def process_excel_file(input_file_path):
    try:
        # Excel-Datei einlesen
        df = pd.read_excel(input_file_path)

        # Spalten 'Typ', 'Messdatum' und 'Angabe' löschen
        df = df.drop(columns=['Typ', 'Messdatum', 'Angabe'])

        # Zeilen löschen und beibehalten gemäß Ihren Anforderungen
        start_row = 13
        while start_row < len(df):
            # 6 Zeilen löschen
            df = df.drop(df.index[start_row:start_row+6])

            # 11 Zeilen beibehalten
            start_row += 11

        # Absoluten Pfad für die Ausgabedatei angeben
        output_file_path = r"C:\Users\thoma\Desktop\Test\Input_mod.xlsx"

        # Das bearbeitete DataFrame speichern
        df.to_excel(output_file_path, index=False)
        
        print("Verarbeitung abgeschlossen. Ergebnis in 'Input_mod.xlsx'")
    except FileNotFoundError:
        print(f"Fehler: Die Datei '{input_file_path}' wurde nicht gefunden.")
    except Exception as e:
        print(f"Allgemeiner Fehler: {e}")

# Aktuelles Arbeitsverzeichnis nur ausgeben, wenn das Skript direkt ausgeführt wird
if __name__ == "__main__":
    input_file_path = r"C:\Users\thoma\Desktop\Test\Input.xlsx"  # Pfad zur Input-Datei ersetzen
    process_excel_file(input_file_path)
    print("Aktuelles Arbeitsverzeichnis:", os.getcwd())
    
Meine Suchen und ersetzen Erweiterung:

Code: Alles auswählen

import pandas as pd
import os

def process_excel_file(input_file_path):
    try:
        # Excel-Datei einlesen
        df = pd.read_excel(input_file_path)

        # Spalten 'Typ', 'Messdatum' und 'Angabe' löschen
        df = df.drop(columns=['Typ', 'Messdatum', 'Angabe'])

        # Zeilen löschen und beibehalten gemäß Ihren Anforderungen
        start_row = 13
        while start_row < len(df):
            # 6 Zeilen löschen
            df = df.drop(df.index[start_row:start_row+6])

            # 11 Zeilen beibehalten
            start_row += 11

        # Ersetzung ab der zweiten Spalte durchführen
        for col in df.columns[1:]:
            df[col] = df[col].apply(lambda x: str(x).replace('cps', ''))

        # Absoluten Pfad für die Ausgabedatei angeben
        output_file_path = r"C:\Users\thoma\Desktop\Test\Input_mod.xlsx"

        # Das bearbeitete DataFrame speichern
        df.to_excel(output_file_path, index=False)
        
        print("Verarbeitung abgeschlossen. Ergebnis in 'Input_mod.xlsx'")
    except FileNotFoundError:
        print(f"Fehler: Die Datei '{input_file_path}' wurde nicht gefunden.")
    except Exception as e:
        print(f"Allgemeiner Fehler: {e}")

# Aktuelles Arbeitsverzeichnis nur ausgeben, wenn das Skript direkt ausgeführt wird
if __name__ == "__main__":
    input_file_path = r"C:\Users\thoma\Desktop\Test\Input.xlsx"  # Pfad zur Input-Datei ersetzen
    process_excel_file(input_file_path)
    print("Aktuelles Arbeitsverzeichnis:", os.getcwd())
Das Suchen und Ersetzen funktioniert zwar, jedoch werden die numerischen Werte als "als Text gespeicherte Zahl" gespeichert? Ich benötige aber numerische Werte was könnte ich in meinem Code abändern, dass nur die "cps" entfernt werden, die Zahlen jedoch erhalten bleiben. Wenn ich die "Suchen und Ersetzen" funktion im Excel benutze funktioniert das mit den numerischen Werten auch, also muss es doch eine Lösung geben?

Vielen Dank im Voraus,
Thomas
Der Link beeinhaltet meinen Testdatensatz, mit den Datensätzen und der modifizierten Datei wie sie dann aussehen soll.
https://mega.nz/folder/QRwlmADT#3YlUKVMtkakeDw6vjiAciA
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Excel-Tabelle ist nicht für die Weiterverarbeitung aufgebaut. Woher kommt die?
Ich kann kaum glauben, dass irgendein Analysegerät so etwas liefert.
Hast Du keine Möglichkeit Deine Daten in einem sinnvollen Format zu bekommen?

Das Format kann nicht mit Pandas verarbeitet werden. Dein ganzes Index-gerechne und die drop-Aufrufe zeigen das deutlich.
Du mußt die Datei direkt mit openpyxl lesen und dann Deine gewünschten Zellen identifizieren, und dann mit String-Methoden deine gewünschten Zahlen extrahieren.
Aber wie gesagt, versuche, die Daten von Deinem Analysegerät in einem sinnvollen Format zu bekommen.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Tabelle ist grosser Mist, aber natuerlich kann man die verarbeiten. Auch wenn es sich sicher lohnt, ob es einen Weg gibt, die Daten roh statt so aggregiert zu bekommen.

Das Formatproblem ist simpel: du sagst doch selbst, dass du deine Zahlwerte als String behandelst. Das str(x) ist dabei unnoetig, denn wenn da ein cps drin stand, kann das auch vorher nur ein String gewesen sein. Der Zellenwert muss dann also noch in ein float konvertiert werden, unter Beruecksichtigung des deutschen Locales fuer die Nachkommastellenangabe.

Nachtrag: der Code ist auch ziemlich maessig, ist das ChatGPT?
11819587
User
Beiträge: 2
Registriert: Sonntag 28. Januar 2024, 09:13

Hallo,

danke für die Infos und Tipps. Ja werde das Datenformat versuchen besser aus dem Gerät herauszubekommen.

Code ist von mir bin aber noch relativ neu am Programmieren, also das geht sicher besser und effizienter. :D
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Solche Fehlerbehandlung solltest du dir sofort abgewoehnen. Das macht man nicht, die verschleiert nur die wahren Ursachen. Wenn es kracht, dann siehst du schon woran es liegt. Statt da jetzt einen sproeden Satz auszugeben.
Antworten