Bonjour à tous,
J'ai un projet concernant la manipulation des données xlsx(Excel) par le logiciel Spyder Python.
Mon objectif est de faire un rapport excel contenant d'une couverture, des contenues dont le tableau et la figure.
Pour ce faire:
- j'ai exporter manuellement des données en format xlsx d'après le site web VCOM.
- et puis je lancer mon code pour traiter ces données afin de créer un rapport xlsx
Le fichier ci-joint contient la figure qui montre mes données en format xlsx :
Et voici mes ligne de code avec les erreurs :
def get_data_site_xlsx_12m(data_pa th_12m_prev, data_path_12m, writer, report_date):
list_path = [data_path_12m_prev, data_path_12m]
df_export_tot = pd.DataFrame()
for data_path in list_path:
data_file = load_workbook(data_path)
sheet = data_file.active
data = sheet.values
data = sheet.iter_rows(min_row=3, values_only=True)
columns = next(data)
df = pd.DataFrame(data, columns=columns)
df = df.replace('x', 0)
file_name = data_path.split('/')[-1]
year = file_name.split('.')[0]
month_mapping = {
'Janv': 1,
'Févr': 2,
'Mars': 3,
'Avril': 4,
'Mai': 5,
'Juin': 6,
'Juil': 7,
'Août': 8,
'Sept': 9,
'Oct': 10,
'Nov': 11,
'Déc': 12
}
# Convert French month names to numeric format
df['Date'] = [month_mapping[month] for month in df['Date']]
df['Formatted_Date'] = df['Date'].apply(lambda month: f"01/{month:02d}/{year}")
columns_to_process = [
("Consommation Jirama totale", "Jirama alimentant les charges"),
("Consommation charge totale","Consommation totale"),
("Énergie active (export)","Export"),
("Compteur rendement photovoltaïque", "Production PV totale"),
("Production GE totale","Groupe alimentant les charges"),
("Fraction renouvelable","Fraction renouvelable"),
("Indice de performance énergétique", "Indice de performance énergétique"),
("Production spécifique", "Rendement spécifique moyen"),
("Ratio de performance", "Performance Ratio"),
("Irradiation","Irradiance moyenne")]
# Create an empty DataFrame to store the results
df_temp = pd.DataFrame()
df_temp['Date'] = pd.to_datetime(df['Formatted_Date'] , format="%d/%m/%Y")
for data_column, export_column in columns_to_process:
matched_columns = []
# Find all data columns that match the partial name (case-insensitive)
for col in df.columns:
if data_column.lower() in col.lower():
matched_columns.append(col)
if matched_columns:
df_temp[export_column] = df[matched_columns].sum(axis=1)
else:
df_temp[export_column] = [0] * len(df)
if 'Export' in df_temp.columns:
df_temp["Export"] = df_temp["Export"].diff()
df_temp = df_temp.fillna(0)
df_export = pd.DataFrame()
df_export['Date'] = df_temp['Date']
df_export['Production PV totale'] = df_temp["Production PV totale"]
df_export["Consommation totale"] = df_temp['Consommation totale']
df_export["Groupe"] = df_temp['Groupe alimentant les charges']
df_export['Jirama'] = df_temp["Jirama alimentant les charges"]
df_export["Export"] = df_temp['Export']
df_export['Irradiance moyenne'] = df_temp['Irradiance moyenne']/30.5
df_export_tot = pd.concat([df_export_tot, df_export], ignore_index=True)
df_export_tot = df_export_tot[~df_export_tot.iloc[:, 1:].eq(0).all(axis=1)]
df_export_tot['Date'] = pd.to_datetime(df_export_tot['Date'] , format="%d/%m/%Y")
filter_cond = report_date.strftime('%m/%d/%Y')
df_export_tot = df_export_tot[df_export_tot['Date'] <= filter_cond]
if len(df_export_tot) > 12:
df_export_tot = df_export_tot.tail(13)
df_export_tot.to_excel(writer, sheet_name= "data_12m", index=False)
Les erreurs :
Traceback (most recent call last):
File ~\miniconda3\Lib\site-packages\pandas\core\indexes\b ase.py:3790 in get_loc
return self._engine.get_loc(casted_ke y)
File index.pyx:152 in pandas._libs.index.IndexEngine .get_loc
File index.pyx:176 in pandas._libs.index.IndexEngine .get_loc
File index.pyx:213 in pandas._libs.index.IndexEngine ._get_loc_duplicates
KeyError: 'Date'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File ~\miniconda3\Lib\site-packages\spyder_kernels\py3com pat.py:356 in compat_exec
res = exec(code, globals, locals)
File c:\users\elino\dossierssav\rep ortgenerator\report_generator_ mc.py:810
generator(path_master,path_src )
File c:\users\elino\dossierssav\rep ortgenerator\report_generator_ mc.py:467 in generator
get_data_site_xlsx_12m(data_pa th_12m_prev, data_path_12m, writer, report_date)
File c:\users\elino\dossierssav\rep ortgenerator\report_generator_ mc.py:64 in get_data_site_xlsx_12m
df['Date'] = [month_mapping[month] for month in df['Date']]
File ~\miniconda3\Lib\site-packages\pandas\core\frame.py: 3896 in __getitem__
indexer = self.columns.get_loc(key)
File ~\miniconda3\Lib\site-packages\pandas\core\indexes\b ase.py:3797 in get_loc
raise KeyError(key) from err
KeyError: 'Date'
Quelqu'un pourrait m'aider à résoudre ce problème?
Merci d'avance pour votre réponse et bonne journée à tous.
-----