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

@ -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
@ -125,22 +136,32 @@ class CSVVisualizer:
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"""