From 2b393b48eb1b014d922bbe9d24c0fd6323fedacc Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 10 Jul 2025 19:52:50 +0200 Subject: [PATCH] CSVVisualizer.py aktualisiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eine neue clean_data() Methode, die: Leere Zeilen entfernt Fehlende Werte mit linearer Interpolation füllt Fehlende Phasen mit der letzten bekannten Phase füllt Die Zeitachse sortiert Verbesserte Fehlerbehandlung für fehlende Werte Bessere Handhabung von Phasenwechseln in der Visualisierung Konsistente Behandlung der Zeitachse (D) --- CSVVisualizer.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/CSVVisualizer.py b/CSVVisualizer.py index 085b260..a39cb89 100644 --- a/CSVVisualizer.py +++ b/CSVVisualizer.py @@ -8,6 +8,7 @@ from tkinter import Tk, filedialog, messagebox from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import tkinter as tk from tkinter import ttk +import numpy as np class CSVVisualizer: def __init__(self, root): @@ -111,8 +112,8 @@ class CSVVisualizer: } ) - # Bereinige Phasen-Namen - self.df['Phase'] = self.df['Phase'].str.strip() + # Bereinige die Daten + self.clean_data() self.file_label.config(text=os.path.basename(filepath)) self.status_var.set(f"Daten geladen: {len(self.df)} Messungen") @@ -122,6 +123,25 @@ class CSVVisualizer: messagebox.showerror("Fehler", f"Fehler beim Laden:\n{str(e)}") self.status_var.set("Fehler beim Laden") + def clean_data(self): + """Bereinigt die Daten und füllt fehlende Werte""" + # Bereinige Phasen-Namen + self.df['Phase'] = self.df['Phase'].str.strip() + + # Entferne Zeilen mit komplett leeren Werten + self.df.dropna(how='all', inplace=True) + + # Fülle fehlende Spannung/Strom Werte mit linearen Interpolation + self.df['Voltage(V)'] = self.df['Voltage(V)'].interpolate(method='linear') + self.df['Current(A)'] = self.df['Current(A)'].interpolate(method='linear') + + # Fülle fehlende Phasen mit der letzten bekannten Phase + self.df['Phase'].fillna(method='ffill', inplace=True) + + # Stelle sicher, dass die Zeit monoton steigend ist + self.df.sort_values('Time(s)', inplace=True) + self.df.reset_index(drop=True, inplace=True) + def update_plot(self): """Aktualisiert den Plot mit den aktuellen Daten""" if not hasattr(self, 'df'):