CSVVisualizer.py aktualisiert

(D) Float error
This commit is contained in:
Jan 2025-07-10 19:56:29 +02:00
parent 2b393b48eb
commit a5b49e99f7

View File

@ -87,7 +87,7 @@ class CSVVisualizer:
f"Capacity: {test_params.get('Battery Capacity', 'N/A')} | "
f"Current: {test_params.get('Test Current', 'N/A')}"
)
try:
# Lese nur Datenzeilen (ignoriere Kommentare und leere Zeilen)
skip_rows = 0
@ -97,9 +97,19 @@ class CSVVisualizer:
break
skip_rows += 1
# Bestimme die letzte Datenzeile (ignoriere alles nach '# TEST SUMMARY')
with open(filepath, 'r') as f:
lines = f.readlines()
end_row = len(lines)
for i, line in enumerate(lines):
if line.startswith('# TEST SUMMARY'):
end_row = i
break
self.df = pd.read_csv(
filepath,
skiprows=skip_rows,
nrows=end_row - skip_rows - 1 if end_row > skip_rows else None,
dtype={
'Time(s)': 'float32',
'Voltage(V)': 'float32',
@ -109,7 +119,8 @@ class CSVVisualizer:
'Charge_Capacity(Ah)': 'float32',
'Coulomb_Eff(%)': 'float32',
'Cycle': 'int32'
}
},
on_bad_lines='warn'
)
# Bereinige die Daten
@ -118,29 +129,39 @@ class CSVVisualizer:
self.file_label.config(text=os.path.basename(filepath))
self.status_var.set(f"Daten geladen: {len(self.df)} Messungen")
self.update_plot()
except Exception as e:
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"""
if self.df.empty:
return
# 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 numerische Werte mit linearen Interpolation
numeric_cols = ['Time(s)', 'Voltage(V)', 'Current(A)',
'Discharge_Capacity(Ah)', 'Charge_Capacity(Ah)',
'Coulomb_Eff(%)']
for col in numeric_cols:
if col in self.df.columns:
self.df[col] = pd.to_numeric(self.df[col], errors='coerce')
self.df[col] = self.df[col].interpolate(method='linear')
# Fülle fehlende Phasen mit der letzten bekannten Phase
self.df['Phase'].fillna(method='ffill', inplace=True)
if 'Phase' in self.df.columns:
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)
if 'Time(s)' in self.df.columns:
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"""