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 break
skip_rows += 1 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( self.df = pd.read_csv(
filepath, filepath,
skiprows=skip_rows, skiprows=skip_rows,
nrows=end_row - skip_rows - 1 if end_row > skip_rows else None,
dtype={ dtype={
'Time(s)': 'float32', 'Time(s)': 'float32',
'Voltage(V)': 'float32', 'Voltage(V)': 'float32',
@ -109,7 +119,8 @@ class CSVVisualizer:
'Charge_Capacity(Ah)': 'float32', 'Charge_Capacity(Ah)': 'float32',
'Coulomb_Eff(%)': 'float32', 'Coulomb_Eff(%)': 'float32',
'Cycle': 'int32' 'Cycle': 'int32'
} },
on_bad_lines='warn'
) )
# Bereinige die Daten # Bereinige die Daten
@ -125,20 +136,30 @@ class CSVVisualizer:
def clean_data(self): def clean_data(self):
"""Bereinigt die Daten und füllt fehlende Werte""" """Bereinigt die Daten und füllt fehlende Werte"""
if self.df.empty:
return
# Bereinige Phasen-Namen # Bereinige Phasen-Namen
self.df['Phase'] = self.df['Phase'].str.strip() self.df['Phase'] = self.df['Phase'].str.strip()
# Entferne Zeilen mit komplett leeren Werten # Entferne Zeilen mit komplett leeren Werten
self.df.dropna(how='all', inplace=True) self.df.dropna(how='all', inplace=True)
# Fülle fehlende Spannung/Strom Werte mit linearen Interpolation # Fülle fehlende numerische Werte mit linearen Interpolation
self.df['Voltage(V)'] = self.df['Voltage(V)'].interpolate(method='linear') numeric_cols = ['Time(s)', 'Voltage(V)', 'Current(A)',
self.df['Current(A)'] = self.df['Current(A)'].interpolate(method='linear') '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 # Fülle fehlende Phasen mit der letzten bekannten Phase
if 'Phase' in self.df.columns:
self.df['Phase'].fillna(method='ffill', inplace=True) self.df['Phase'].fillna(method='ffill', inplace=True)
# Stelle sicher, dass die Zeit monoton steigend ist # Stelle sicher, dass die Zeit monoton steigend ist
if 'Time(s)' in self.df.columns:
self.df.sort_values('Time(s)', inplace=True) self.df.sort_values('Time(s)', inplace=True)
self.df.reset_index(drop=True, inplace=True) self.df.reset_index(drop=True, inplace=True)