Source code for cellpy.parameters.legacy.update_headers

import logging
from dataclasses import dataclass
from typing import Tuple, Dict, List

import pandas as pd
import numpy as np

from cellpy.parameters.internal_settings import BaseHeaders, CELLPY_FILE_VERSION

[docs] HEADERS_KEYS_STEP_TABLE_EXTENDED = [ "point", "test_time", "step_time", "current", "voltage", "charge", "discharge", "internal_resistance", ]
[docs] HEADERS_STEP_TABLE_EXTENSIONS = ["min", "max", "avr", "first", "last", "delta", "std"]
@dataclass
[docs] class HeadersRawV4(BaseHeaders):
[docs] aci_phase_angle_txt: str = "ACI_Phase_Angle"
[docs] ref_aci_phase_angle_txt: str = "Reference_ACI_Phase_Angle"
[docs] ac_impedance_txt: str = "AC_Impedance"
[docs] ref_ac_impedance_txt: str = "Reference_AC_Impedance"
[docs] charge_capacity_txt: str = "Charge_Capacity"
[docs] charge_energy_txt: str = "Charge_Energy"
[docs] current_txt: str = "Current"
[docs] cycle_index_txt: str = "Cycle_Index"
[docs] data_point_txt: str = "Data_Point"
[docs] datetime_txt: str = "DateTime"
[docs] discharge_capacity_txt: str = "Discharge_Capacity"
[docs] discharge_energy_txt: str = "Discharge_Energy"
[docs] internal_resistance_txt: str = "Internal_Resistance"
[docs] is_fc_data_txt: str = "Is_FC_Data"
[docs] step_index_txt: str = "Step_Index"
[docs] sub_step_index_txt: str = "Sub_Step_Index"
[docs] step_time_txt: str = "Step_Time"
[docs] sub_step_time_txt: str = "Sub_Step_Time"
[docs] test_id_txt: str = "Test_ID"
[docs] test_time_txt: str = "Test_Time"
[docs] voltage_txt: str = "Voltage"
[docs] ref_voltage_txt: str = "Reference_Voltage"
[docs] dv_dt_txt: str = "dV/dt"
[docs] frequency_txt: str = "Frequency"
[docs] amplitude_txt: str = "Amplitude"
@dataclass
[docs] class HeadersRawV5(BaseHeaders):
[docs] aci_phase_angle_txt: str = "ACI_Phase_Angle"
[docs] ref_aci_phase_angle_txt: str = "Reference_ACI_Phase_Angle"
[docs] ac_impedance_txt: str = "AC_Impedance"
[docs] ref_ac_impedance_txt: str = "Reference_AC_Impedance"
[docs] charge_capacity_txt: str = "Charge_Capacity"
[docs] charge_energy_txt: str = "Charge_Energy"
[docs] current_txt: str = "Current"
[docs] cycle_index_txt: str = "Cycle_Index"
[docs] data_point_txt: str = "Data_Point"
[docs] datetime_txt: str = "DateTime"
[docs] discharge_capacity_txt: str = "Discharge_Capacity"
[docs] discharge_energy_txt: str = "Discharge_Energy"
[docs] internal_resistance_txt: str = "Internal_Resistance"
[docs] is_fc_data_txt: str = "Is_FC_Data"
[docs] step_index_txt: str = "Step_Index"
[docs] sub_step_index_txt: str = "Sub_Step_Index"
[docs] step_time_txt: str = "Step_Time"
[docs] sub_step_time_txt: str = "Sub_Step_Time"
[docs] test_id_txt: str = "Test_ID"
[docs] test_time_txt: str = "Test_Time"
[docs] voltage_txt: str = "Voltage"
[docs] ref_voltage_txt: str = "Reference_Voltage"
[docs] dv_dt_txt: str = "dV/dt"
[docs] frequency_txt: str = "Frequency"
[docs] amplitude_txt: str = "Amplitude"
@dataclass
[docs] class HeadersRawV6(BaseHeaders):
[docs] aci_phase_angle_txt: str = "ACI_Phase_Angle"
[docs] ref_aci_phase_angle_txt: str = "Reference_ACI_Phase_Angle"
[docs] ac_impedance_txt: str = "AC_Impedance"
[docs] ref_ac_impedance_txt: str = "Reference_AC_Impedance"
[docs] charge_capacity_txt: str = "Charge_Capacity"
[docs] charge_energy_txt: str = "Charge_Energy"
[docs] current_txt: str = "Current"
[docs] cycle_index_txt: str = "Cycle_Index"
[docs] data_point_txt: str = "Data_Point"
[docs] datetime_txt: str = "DateTime"
[docs] discharge_capacity_txt: str = "Discharge_Capacity"
[docs] discharge_energy_txt: str = "Discharge_Energy"
[docs] internal_resistance_txt: str = "Internal_Resistance"
[docs] is_fc_data_txt: str = "Is_FC_Data"
[docs] step_index_txt: str = "Step_Index"
[docs] sub_step_index_txt: str = "Sub_Step_Index"
[docs] step_time_txt: str = "Step_Time"
[docs] sub_step_time_txt: str = "Sub_Step_Time"
[docs] test_id_txt: str = "Test_ID"
[docs] test_time_txt: str = "Test_Time"
[docs] voltage_txt: str = "Voltage"
[docs] ref_voltage_txt: str = "Reference_Voltage"
[docs] dv_dt_txt: str = "dV/dt"
[docs] frequency_txt: str = "Frequency"
[docs] amplitude_txt: str = "Amplitude"
@dataclass
[docs] class HeadersRawV7(BaseHeaders):
[docs] aci_phase_angle_txt: str = "aci_phase_angle"
[docs] ref_aci_phase_angle_txt: str = "ref_aci_phase_angle"
[docs] ac_impedance_txt: str = "ac_impedance"
[docs] ref_ac_impedance_txt: str = "ref_ac_impedance"
[docs] charge_capacity_txt: str = "charge_capacity"
[docs] charge_energy_txt: str = "charge_energy"
[docs] current_txt: str = "current"
[docs] cycle_index_txt: str = "cycle_index"
[docs] data_point_txt: str = "data_point"
[docs] datetime_txt: str = "date_time"
[docs] discharge_capacity_txt: str = "discharge_capacity"
[docs] discharge_energy_txt: str = "discharge_energy"
[docs] internal_resistance_txt: str = "internal_resistance"
[docs] power_txt: str = "power"
[docs] is_fc_data_txt: str = "is_fc_data"
[docs] step_index_txt: str = "step_index"
[docs] sub_step_index_txt: str = "sub_step_index"
[docs] step_time_txt: str = "step_time"
[docs] sub_step_time_txt: str = "sub_step_time"
[docs] test_id_txt: str = "test_id"
[docs] test_time_txt: str = "test_time"
[docs] voltage_txt: str = "voltage"
[docs] ref_voltage_txt: str = "reference_voltage"
[docs] dv_dt_txt: str = "dv_dt"
[docs] frequency_txt: str = "frequency"
[docs] amplitude_txt: str = "amplitude"
[docs] channel_id_txt: str = "channel_id"
[docs] data_flag_txt: str = "data_flag"
[docs] test_name_txt: str = "test_name"
@dataclass
[docs] class HeadersSummaryV5(BaseHeaders):
[docs] cycle_index: str = "Cycle_Index"
[docs] data_point: str = "Data_Point"
[docs] test_time: str = "Test_Time"
[docs] datetime: str = "DateTime"
[docs] discharge_capacity_raw: str = "Discharge_Capacity"
[docs] charge_capacity_raw: str = "Charge_Capacity"
[docs] discharge_capacity: str = "discharge_capacity_u_mAh_g"
[docs] charge_capacity: str = "charge_capacity_u_mAh_g"
[docs] cumulated_charge_capacity: str = "cumulated_charge_capacity_u_mAh_g"
[docs] cumulated_discharge_capacity: str = "cumulated_discharge_capacity_u_mAh_g"
[docs] coulombic_efficiency: str = "Coulombic_Efficiency(percentage)"
[docs] cumulated_coulombic_efficiency: str = "cumulated_coulombic_efficiency_u_percentage"
[docs] coulombic_difference: str = "coulombic_difference_u_mAh_g"
[docs] cumulated_coulombic_difference: str = "cumulated_coulombic_difference_u_mAh_g"
[docs] discharge_capacity_loss: str = "discharge_capacity_loss_u_mAh_g"
[docs] charge_capacity_loss: str = "charge_capacity_loss_u_mAh_g"
[docs] cumulated_discharge_capacity_loss: str = "cumulated_discharge_capacity_loss_u_mAh_g"
[docs] cumulated_charge_capacity_loss: str = "cumulated_charge_capacity_loss_u_mAh_g"
[docs] ir_discharge: str = "IR_Discharge(Ohms)"
[docs] ir_charge: str = "IR_Charge(Ohms)"
[docs] ocv_first_min: str = "OCV_First_Min(V)"
[docs] ocv_second_min: str = "OCV_Second_Min(V)"
[docs] ocv_first_max: str = "OCV_First_Max(V)"
[docs] ocv_second_max: str = "OCV_Second_Max(V)"
[docs] end_voltage_discharge: str = "End_Voltage_Discharge(V)"
[docs] end_voltage_charge: str = "End_Voltage_Charge(V)"
[docs] cumulated_ric_disconnect: str = "RIC_Disconnect(none)"
[docs] cumulated_ric_sei: str = "RIC_SEI(none)"
[docs] cumulated_ric: str = "RIC(none)"
[docs] normalized_cycle_index: str = "Normalized_Cycle_Index"
[docs] normalized_charge_capacity: str = "normalized_charge_capacity"
[docs] normalized_discharge_capacity: str = "normalized_discharge_capacity"
[docs] low_level: str = "Low_Level(percentage)"
[docs] high_level: str = "High_Level(percentage)"
[docs] shifted_charge_capacity: str = "Charge_Endpoint_Slippage(mAh/g)"
[docs] shifted_discharge_capacity: str = "Discharge_Endpoint_Slippage(mAh/g)"
[docs] temperature_last: str = "Last_Temperature(C)"
[docs] temperature_mean: str = "Average_Temperature(C)"
[docs] areal_charge_capacity: str = "areal_charge_capacity_u_mAh_cm2"
[docs] areal_discharge_capacity: str = "areal_discharge_capacity_u_mAh_cm2"
[docs] charge_c_rate: str = "Charge_C_rate"
[docs] discharge_c_rate: str = "Discharge_C_rate"
# pre_aux: str = "aux_" @dataclass
[docs] class HeadersSummaryV6(BaseHeaders):
[docs] cycle_index: str = "cycle_index"
[docs] data_point: str = "data_point"
[docs] test_time: str = "test_time"
[docs] datetime: str = "date_time"
[docs] discharge_capacity_raw: str = "discharge_capacity"
[docs] charge_capacity_raw: str = "charge_capacity"
[docs] test_name: str = "test_name"
[docs] data_flag: str = "data_flag"
[docs] channel_id: str = "channel_id"
[docs] discharge_capacity: str = "discharge_capacity_u_mAh_g"
[docs] charge_capacity: str = "charge_capacity_u_mAh_g"
[docs] cumulated_charge_capacity: str = "cumulated_charge_capacity_u_mAh_g"
[docs] cumulated_discharge_capacity: str = "cumulated_discharge_capacity_u_mAh_g"
[docs] coulombic_efficiency: str = "coulombic_efficiency_u_percentage"
[docs] cumulated_coulombic_efficiency: str = "cumulated_coulombic_efficiency_u_percentage"
[docs] coulombic_difference: str = "coulombic_difference_u_mAh_g"
[docs] cumulated_coulombic_difference: str = "cumulated_coulombic_difference_u_mAh_g"
[docs] discharge_capacity_loss: str = "discharge_capacity_loss_u_mAh_g"
[docs] charge_capacity_loss: str = "charge_capacity_loss_u_mAh_g"
[docs] cumulated_discharge_capacity_loss: str = "cumulated_discharge_capacity_loss_u_mAh_g"
[docs] cumulated_charge_capacity_loss: str = "cumulated_charge_capacity_loss_u_mAh_g"
[docs] ir_discharge: str = "ir_discharge_u_Ohms"
[docs] ir_charge: str = "ir_charge_u_Ohms"
[docs] ocv_first_min: str = "ocv_first_min_u_V"
[docs] ocv_second_min: str = "ocv_second_min_u_V"
[docs] ocv_first_max: str = "ocv_first_max_u_V"
[docs] ocv_second_max: str = "ocv_second_max_u_V"
[docs] end_voltage_discharge: str = "end_voltage_discharge_u_V"
[docs] end_voltage_charge: str = "end_voltage_charge_u_V"
[docs] cumulated_ric_disconnect: str = "cumulated_ric_disconnect_u_none"
[docs] cumulated_ric_sei: str = "cumulated_ric_sei_u_none"
[docs] cumulated_ric: str = "cumulated_ric_u_none"
[docs] normalized_cycle_index: str = "normalized_cycle_index"
[docs] normalized_charge_capacity: str = "normalized_charge_capacity"
[docs] normalized_discharge_capacity: str = "normalized_discharge_capacity"
[docs] low_level: str = "low_level_u_percentage"
[docs] high_level: str = "high_level_u_percentage"
[docs] shifted_charge_capacity: str = "shifted_charge_capacity_u_mAh_g"
[docs] shifted_discharge_capacity: str = "shifted_discharge_capacity_u_mAh_g"
[docs] temperature_last: str = "temperature_last_u_C"
[docs] temperature_mean: str = "temperature_mean_u_C"
[docs] areal_charge_capacity: str = "areal_charge_capacity_u_mAh_cm2"
[docs] areal_discharge_capacity: str = "areal_discharge_capacity_u_mAh_cm2"
[docs] charge_c_rate: str = "charge_c_rate"
[docs] discharge_c_rate: str = "discharge_c_rate"
# pre_aux: str = "aux_" @dataclass
[docs] class HeadersSummaryV7(BaseHeaders):
[docs] cycle_index: str = "cycle_index"
[docs] data_point: str = "data_point"
[docs] test_time: str = "test_time"
[docs] datetime: str = "date_time"
[docs] discharge_capacity_raw: str = "discharge_capacity"
[docs] charge_capacity_raw: str = "charge_capacity"
[docs] test_name: str = "test_name"
[docs] data_flag: str = "data_flag"
[docs] channel_id: str = "channel_id"
[docs] coulombic_efficiency: str = "coulombic_efficiency"
[docs] cumulated_coulombic_efficiency: str = "cumulated_coulombic_efficiency"
[docs] discharge_capacity: str = "discharge_capacity_gravimetric"
[docs] charge_capacity: str = "charge_capacity_gravimetric"
[docs] cumulated_charge_capacity: str = "cumulated_charge_capacity_gravimetric"
[docs] cumulated_discharge_capacity: str = "cumulated_discharge_capacity_gravimetric"
[docs] coulombic_difference: str = "coulombic_difference_gravimetric"
[docs] cumulated_coulombic_difference: str = "cumulated_coulombic_difference_gravimetric"
[docs] discharge_capacity_loss: str = "discharge_capacity_loss_gravimetric"
[docs] charge_capacity_loss: str = "charge_capacity_loss_gravimetric"
[docs] cumulated_discharge_capacity_loss: str = ( "cumulated_discharge_capacity_loss_gravimetric" )
[docs] cumulated_charge_capacity_loss: str = "cumulated_charge_capacity_loss_gravimetric"
[docs] areal_charge_capacity: str = "charge_capacity_areal"
[docs] areal_discharge_capacity: str = "discharge_capacity_areal"
[docs] shifted_charge_capacity: str = "shifted_charge_capacity_gravimetric"
[docs] shifted_discharge_capacity: str = "shifted_discharge_capacity_gravimetric"
[docs] ir_discharge: str = "ir_discharge"
[docs] ir_charge: str = "ir_charge"
[docs] ocv_first_min: str = "ocv_first_min"
[docs] ocv_second_min: str = "ocv_second_min"
[docs] ocv_first_max: str = "ocv_first_max"
[docs] ocv_second_max: str = "ocv_second_max"
[docs] end_voltage_discharge: str = "end_voltage_discharge"
[docs] end_voltage_charge: str = "end_voltage_charge"
[docs] cumulated_ric_disconnect: str = "cumulated_ric_disconnect"
[docs] cumulated_ric_sei: str = "cumulated_ric_sei"
[docs] cumulated_ric: str = "cumulated_ric"
[docs] normalized_cycle_index: str = "normalized_cycle_index"
[docs] normalized_charge_capacity: str = "normalized_charge_capacity"
[docs] normalized_discharge_capacity: str = "normalized_discharge_capacity"
[docs] low_level: str = "low_level"
[docs] high_level: str = "high_level"
[docs] temperature_last: str = "temperature_last"
[docs] temperature_mean: str = "temperature_mean"
[docs] charge_c_rate: str = "charge_c_rate"
[docs] discharge_c_rate: str = "discharge_c_rate"
@dataclass
[docs] class HeadersStepTableV7(BaseHeaders):
[docs] test: str = "test"
[docs] ustep: str = "ustep"
[docs] cycle: str = "cycle"
[docs] step: str = "step"
[docs] test_time: str = "test_time"
[docs] step_time: str = "step_time"
[docs] sub_step: str = "sub_step"
[docs] type: str = "type"
[docs] sub_type: str = "sub_type"
[docs] info: str = "info"
[docs] voltage: str = "voltage"
[docs] current: str = "current"
[docs] charge: str = "charge"
[docs] discharge: str = "discharge"
[docs] point: str = "point"
[docs] internal_resistance: str = "ir"
[docs] internal_resistance_change: str = "ir_pct_change"
[docs] rate_avr: str = "rate_avr"
@dataclass
[docs] class HeadersJournalV5(BaseHeaders):
[docs] filename: str = "filenames"
[docs] mass: str = "masses"
[docs] total_mass: str = "total_masses"
[docs] loading: str = "loadings"
[docs] fixed: str = "fixed"
[docs] label: str = "labels"
[docs] cell_type: str = "cell_types"
[docs] raw_file_names: str = "raw_file_names"
[docs] cellpy_file_name: str = "cellpy_file_names"
[docs] group: str = "groups"
[docs] sub_group: str = "sub_groups"
@dataclass
[docs] class HeadersJournalV7(BaseHeaders):
[docs] filename: str = "filename"
[docs] mass: str = "mass"
[docs] total_mass: str = "total_mass"
[docs] loading: str = "loading"
[docs] nom_cap: str = "nom_cap"
[docs] experiment: str = "experiment"
[docs] fixed: str = "fixed"
[docs] label: str = "label"
[docs] cell_type: str = "cell_type"
[docs] instrument: str = "instrument"
[docs] raw_file_names: str = "raw_file_names"
[docs] cellpy_file_name: str = "cellpy_file_name"
[docs] group: str = "group"
[docs] sub_group: str = "sub_group"
[docs] comment: str = "comment"
[docs] argument: str = "argument"
[docs] summary_header_versions = { 1: HeadersSummaryV5(), 2: HeadersSummaryV5(), 3: HeadersSummaryV5(), 4: HeadersSummaryV5(), 5: HeadersSummaryV5(), 6: HeadersSummaryV6(), 7: HeadersSummaryV7(), 8: HeadersSummaryV7(), }
[docs] raw_header_versions = { 1: HeadersRawV4(), 2: HeadersRawV4(), 3: HeadersRawV4(), 4: HeadersRawV4(), 5: HeadersRawV5(), 6: HeadersRawV6(), 7: HeadersRawV7(), 8: HeadersRawV7(), }
[docs] steps_header_versions = { 1: HeadersStepTableV7(), 2: HeadersStepTableV7(), 3: HeadersStepTableV7(), 4: HeadersStepTableV7(), 5: HeadersStepTableV7(), 6: HeadersStepTableV7(), 7: HeadersStepTableV7(), 8: HeadersStepTableV7(), }
[docs] journal_header_versions = { 1: HeadersJournalV5(), 2: HeadersJournalV5(), 3: HeadersJournalV5(), 4: HeadersJournalV5(), 5: HeadersJournalV5(), 6: HeadersJournalV7(), 7: HeadersJournalV7(), 8: HeadersJournalV7(), }
[docs] headers_journal_v0 = HeadersJournalV5()
[docs] def rename_step_columns( steps: pd.DataFrame, old_version: int, new_version: int = CELLPY_FILE_VERSION, **kwargs, ) -> pd.DataFrame: logging.debug("renaming headers") old = summary_header_versions.get(old_version) new = summary_header_versions.get(new_version) steps = rename_columns( steps, old, new, **kwargs, ) return steps
[docs] def rename_raw_columns( raw: pd.DataFrame, old_version: int, new_version: int = CELLPY_FILE_VERSION, **kwargs, ) -> pd.DataFrame: logging.debug("renaming headers") old = raw_header_versions.get(old_version) new = raw_header_versions.get(new_version) raw = rename_columns( raw, old, new, **kwargs, ) return raw
[docs] def rename_summary_columns( summary: pd.DataFrame, old_version: int, new_version: int = CELLPY_FILE_VERSION, **kwargs, ) -> pd.DataFrame: """Rename the summary headers to new format. Args: summary: summary dataframe in old format. old_version: old format (cellpy_file_format (might use summary format number instead soon)). new_version: new format (cellpy_file_format (might use summary format number instead soon)). **kwargs: remove_missing_in_new (bool): remove the columns that are not defined in the new format. populate_missing_in_old (bool): add "new-format" missing columns (with np.NAN). Returns: summary (pandas.DataFrame) with column headers in the new format. """ logging.debug("renaming headers") old = summary_header_versions.get(old_version) new = summary_header_versions.get(new_version) summary = rename_columns( summary, old, new, **kwargs, ) return summary
[docs] def rename_fid_columns( fid_table: pd.DataFrame, old_version: int, new_version: int = CELLPY_FILE_VERSION, **kwargs, ) -> pd.DataFrame: logging.debug("renaming headers") logging.critical( "RENAMING NOT IMPLEMENTED YET -> Please, create an issue on Github" ) return fid_table
[docs] def get_column_name_mapper( old_columns: BaseHeaders, new_columns: BaseHeaders ) -> Tuple[Dict[str, str], List[str], List[str]]: """Create a dictionary that maps old column names to new column names. Args: old_columns: The BaseHeaders for the old format. new_columns: The BaseHeaders for the new format. Returns: Translation dictionary, list of missing keys in new format, list of missing keys in old format. """ translations = {} missing_in_old = [] old_columns_keys = old_columns.keys() new_columns_keys = new_columns.keys() for key in new_columns_keys: if old_column := old_columns.get(key): translations[old_column] = new_columns.get(key) old_columns_keys.remove(key) else: missing_in_old.append(key) missing_in_new = old_columns_keys return translations, missing_in_new, missing_in_old
[docs] def rename_columns( df: pd.DataFrame, old: BaseHeaders, new: BaseHeaders, remove_missing_in_new: bool = False, populate_missing_in_old: bool = True, ) -> pd.DataFrame: """Rename the column headers of a cells dataframe. Usage: >>> old_format_headers = HeadersSummaryV6() >>> new_format_headers = HeadersSummaryV7() >>> df_new_format = rename_columns(df_old_format, old_format_headers, new_format_headers) Args: df: The dataframe. old: The BaseHeaders for the old format. new: The BaseHeaders for the new format. remove_missing_in_new: remove the columns that are not defined in the new format. populate_missing_in_old: add "new-format" missing columns (with np.NAN). Returns: Dataframe with updated columns """ col_name_mapper, missing_in_new, missing_in_old = get_column_name_mapper(old, new) if remove_missing_in_new: for col in missing_in_new: df = df.drop(col, axis=1) if populate_missing_in_old: for col in missing_in_old: df[col] = np.NAN return df.rename(columns=col_name_mapper)
def _create_dummy_summary(columns): df = pd.DataFrame( data=np.random.rand(5, len(columns) - 1), index=range(1, 6), columns=columns[1:] ) df.index.name = columns[0] return df # Use this as inspiration if you want to implement translation of step table headers: # HEADERS_KEYS_STEP_TABLE_EXTENDED = [ # "point", # "test_time", # "step_time", # "current", # "voltage", # "charge", # "discharge", # "internal_resistance", # ] # HEADERS_STEP_TABLE_EXTENSIONS = ["min", "max", "avr", "first", "last", "delta", "std"] # # # headers_step_table_v5["test"] = "test" # headers_step_table_v5["ustep"] = "ustep" # headers_step_table_v5["cycle"] = "cycle" # headers_step_table_v5["step"] = "step" # headers_step_table_v5["test_time"] = "test_time" # headers_step_table_v5["step_time"] = "step_time" # headers_step_table_v5["sub_step"] = "sub_step" # headers_step_table_v5["type"] = "type" # headers_step_table_v5["sub_type"] = "sub_type" # headers_step_table_v5["info"] = "info" # headers_step_table_v5["voltage"] = "voltage" # headers_step_table_v5["current"] = "current" # headers_step_table_v5["charge"] = "charge" # headers_step_table_v5["discharge"] = "discharge" # headers_step_table_v5["point"] = "point" # headers_step_table_v5["internal_resistance"] = "ir" # headers_step_table_v5["internal_resistance_change"] = "ir_pct_change" # headers_step_table_v5["rate_avr"] = "rate_avr" # def translate_headers(data_sets, cellpy_file_version): # # this works for upgrading to versions 6, # # remark that the extensions for the step table is hard-coded # logging.debug(f"translate headers from v{cellpy_file_version}") # # summary_rename_dict = { # headers_summary_v5[key]: HEADERS_SUMMARY[key] # for key in HEADERS_SUMMARY # if key in headers_summary_v5 # } # # steps_rename_dict = { # headers_step_table_v5[key]: HEADERS_STEP_TABLE[key] # for key in HEADERS_STEP_TABLE # if key in headers_step_table_v5 # } # # steps_rename_dict_extensions = {} # for key in HEADERS_KEYS_STEP_TABLE_EXTENDED: # for extension in HEADERS_STEP_TABLE_EXTENSIONS: # old = "_".join([HEADERS_STEP_TABLE[key], extension]) # new = "_".join([headers_step_table_v5[key], extension]) # steps_rename_dict_extensions[old] = new # # raw_rename_dict = { # headers_normal_v5[key]: HEADERS_NORMAL[key] for key in HEADERS_NORMAL # } # # summary_index_name = HEADERS_SUMMARY["cycle_index"] # raw_index_name = HEADERS_NORMAL["data_point_txt"] # # # from pprint import pprint # # pprint(summary_rename_dict) # # pprint(steps_rename_dict) # # pprint(steps_rename_dict_extensions) # # pprint(raw_rename_dict) # # new_data_sets = [] # for data_set in data_sets: # data_set.summary.rename(columns=summary_rename_dict, inplace=True) # data_set.raw.rename(columns=raw_rename_dict, inplace=True) # data_set.steps.rename(columns=steps_rename_dict, inplace=True) # data_set.steps.rename(columns=steps_rename_dict_extensions, inplace=True) # # # we also need to update the index-name # data_set.summary.index.name = summary_index_name # data_set.raw.index.name = raw_index_name # # new_data_sets.append(data_set) # # # pprint(data_set.summary.columns) # # pprint(data_set.steps.columns) # # pprint(data_set.raw.columns) # # check(new_data_sets) # return new_data_sets def _check(): old = HeadersSummaryV6() new = HeadersSummaryV7() df = _create_dummy_summary(columns=old.keys()) remove_missing_in_new = False populate_missing_in_old = True df = rename_columns( df, old, new, remove_missing_in_new=remove_missing_in_new, populate_missing_in_old=populate_missing_in_old, ) print(df.head()) if __name__ == "__main__": _check()