Exporter les contenues du colonne Date dans un DataFrame créé
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Exporter les contenues du colonne Date dans un DataFrame créé



  1. #1
    Elinobrouss

    Exporter les contenues du colonne Date dans un DataFrame créé


    ------

    Bonjour à tous,

    Je travaille actuellement sur un fichier Excel au format xlsx en utilisant Python. Mon objectif est de lire les données d'une feuille de calcul et de les écrire dans une feuille existante nommée 'data_12m'.

    Cependant, je rencontre un problème : les données de la colonne 'Date' ne parviennent pas à être écrites dans cette feuille existante (DataFrame créé).

    Je sollicite donc votre aide pour résoudre ce problème. Merci d'avance pour vos suggestions et réponses.

    Ci-dessous se trouve ma fonction :

    Code:
    def get_data_site_12m_xlsx(data_input, writer):
        df = pd.read_excel(data_input, sheet_name='Données 12mois', engine='openpyxl')
        print("Columns in original DataFrame:", df.columns)
        print("Head of original DataFrame:")
        print(df.head())
    
        # Remplacement des noms de mois par les dates directement dans la colonne 'Date'
        month_mapping = {
            'Janvier': '01/01/2023',
            'Février': '01/02/2023',
            'Mars': '01/03/2023',
            'Avril': '01/04/2023',
            'Mai': '01/05/2023',
            'Juin': '01/06/2023',
            'Juillet': '01/07/2023',
            'Août': '01/08/2023',
            'Septembre': '01/09/2023',
            'Octobre': '01/10/2023',
            'Novembre': '01/11/2023',
            'Décembre': '01/12/2023'
        }
        
        # Colonnes pertinentes à conserver
        colonnes = ['Date', 'Energie consommées totale [kWh]', 'Energie Export JIRAMA [kWh]', 'Energie GE [kWh]', 'Energie Import JIRAMA [kWh]', 'Energie PV directement consommées [kWh]', 
                    'Energie PV totale [kWh]', 'Indice de performance énergétique [%]', 'Ratio de performance [%]', 'Temps de fonctionnement GE [min]', 'Irradiation (Pyranomètre SR05-D1A3 13760) [W/m²]']
        
        # Filtrage des colonnes pertinentes
        df = df[colonnes]
    
        # Remplacement des noms de mois par les dates dans la colonne 'Date'
        df['Date'] = df['Date'].replace(month_mapping)
    
        print("Head of DataFrame after month replacement:")
        print(df.head())
    
        # Conversion de la colonne 'Date' en format datetime
        df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y', errors='coerce')
        
        print("Type of 'Date' column after conversion:", df['Date'].dtype)
    
        print("Head of DataFrame after date conversion:")
        print(df.head())
    
        # Correction des formats de données
        df = df.apply(lambda x: x.astype(str).str.replace("'", ""))
        df = df.apply(lambda x: x.str.replace("/ ", ""))
        df = df.apply(lambda x: x.str.replace("x", "0"))
        df = df.replace('-', 0)
        df = df.apply(lambda x: pd.to_numeric(x.str.replace(',', '.'), errors='coerce'))
    
        print("Head of processed DataFrame:")
        print(df.head())
    
        # Création du DataFrame pour exportation
        df_export = pd.DataFrame()
        df_export['Date'] = df['Date'] # Utilisation de la colonne 'Date' du DataFrame original
        df_export['PV consommée'] = df['Energie PV directement consommées [kWh]']
        df_export['Production PV totale'] = df['Energie PV totale [kWh]']
        df_export['Consommation totale'] = df['Energie consommées totale [kWh]']
        df_export['Energie prelevee sur le réseau'] = df['Energie Import JIRAMA [kWh]']
        df_export['Injection réseau'] = df['Energie Export JIRAMA [kWh]']
        df_export['Production groupe électrogène'] = df['Energie GE [kWh]']
        df_export['Durée de fonctionnement GE'] = df['Temps de fonctionnement GE [min]']
        df_export['Indice de performance énergetique'] = df['Indice de performance énergétique [%]']
        df_export['Ratio de performance'] = df['Ratio de performance [%]']
        df_export['Irradiation solaire'] = df['Irradiation (Pyranomètre SR05-D1A3 13760) [W/m²]']
    
        print("Head of exported DataFrame:")
        print(df_export.head())
    
        # Exportation vers un fichier Excel
        df_export.to_excel(writer, sheet_name="data_12m", index=False)

    -----

  2. #2
    umfred

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Les autres données s'écrivent ?
    tu as affiché ton df_export avant l'exportation? (je me réponds "oui avec le print(df_export.head()")
    A quoi correspond ton writer ? un nom de fichier ou un ExcelWriter ? et dans ce cas d'un ExcelWriter, le fichier est-il bien fermé après écriture?

  3. #3
    pm42

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Ou pour approcher les choses autrement :

    que contient df_export['Date'] au moment du df_export.to_excel ?
    que contient le fichier Excel ? Tu dis que Date ne s'exporte pas mais plus précisément ? La colonne est vide, fausse, absente ?
    est ce que tu utilises un IDE avec débugger pour suivre en pas à pas ce que ton code fait ? Sinon, c'est le moment de t'y mettre.

  4. #4
    Elinobrouss

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Les autres données sont écrites parfaitement. Mon objet writer est un ExcelWriter et le fichier est correctement fermé avec "template_xlsx.close".
    Actuellement, j'ai réussi à écrire le contenu de la colonne Date.
    Cependant, j'aimerais l'améliorer pour qu'elle puisse incrémenter automatiquement ; par exemple, si le mois de janvier revient, le code doit incrémenter l'année.
    Dernière modification par Elinobrouss ; 29/02/2024 à 11h55.

  5. A voir en vidéo sur Futura
  6. #5
    umfred

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    comment être sûr que c'est le mois de janvier de l'année suivante ? parce que si tu traites 5 fois le même fichier, tu va avoir 5 fois les données avec 5 années successives.

  7. #6
    Elinobrouss

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    @~pm42
    df_export['Date'] consiste à changer le nom du colonne du fichier d'origine. Pourtant, après la conversion du colonne Date en datetime, plus précisement après la Correction des formats de données, le colonne Date devient vide. Mais j'ai modifier mes lignes sur la correction des formats de données sur la ligne : "df = df.apply(lambda x: pd.to_numeric(x.str.replace(', ', '.'), errors='coerce'))" et ça a marché.
    Merci et bonne continuation

  8. #7
    Elinobrouss

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Si j'ai des données des 13 mois dans une tableau excel (janvier 2023, ...,janvier 2024). Alors dans mon fichier de sortie, ça revient janvier 2023 parceque j'ai définie les mois dans "month_mapping". Je dois donc trouver des variables pour corriger ça.

  9. #8
    umfred

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    tu aura donc aussi l'année dans ton fichier d'entrée dans ces cas-là?

  10. #9
    Elinobrouss

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Oui bien sur

  11. #10
    umfred

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Du coup, il n'y a plus de problème, non? tu rajoutes cette colonne (vu que a priori, sauf erreur, tu ne récupères pas) ; tu remplaces tes mois par 01/0x et tu concatènes les colonnes date et année )

    Si c'est la même colonne, ton remplacement actuel ne fonctionnera pas de toute façon

  12. #11
    Elinobrouss

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Merci à tous, ma problème a résolue

  13. #12
    umfred

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Tu peux nous expliquer comment tu as procédé?

  14. #13
    Elinobrouss

    Re : Exporter les contenues du colonne Date dans un DataFrame créé

    Oui, bien sur,

    J'ai crée une fonction pour ajuster l'année en fonction du mois donné, Voici la fonction:

    Code:
    def adjust_year(month, current_year):
        target_date = datetime.strptime(month, '%d/%m/%Y')
        next_month = target_date.replace(day=1, month=(target_date.month % 12) + 1)
        if next_month.month <= target_date.month:  # Si le mois suivant est égal ou antérieur au mois actuel
            return target_date.year + 1, next_month.month  # Incrémenter l'année
        return target_date.year, next_month.month
    previous_year = 2023
        current_year = 2024
        
        # Créer le month_mapping en utilisant la fonction adjust_year
        month_mapping = {}
        for year in [previous_year, current_year]:
            for month_name, month_date in [
                ('Janvier', f'01/01/{year}'),
                ('Février', f'01/02/{year}'),
                ('Mars', f'01/03/{year}'),
                ('Avril', f'01/04/{year}'),
                ('Mai', f'01/05/{year}'),
                ('Juin', f'01/06/{year}'),
                ('Juillet', f'01/07/{year}'),
                ('Août', f'01/08/{year}'),
                ('Septembre', f'01/09/{year}'),
                ('Octobre', f'01/10/{year}'),
                ('Novembre', f'01/11/{year}'),
                ('Décembre', f'01/12/{year}'),
            ]:
                adjusted_year, adjusted_month = adjust_year(month_date, year)
                month_mapping[month_name] = f'01/{adjusted_month:02d}/{adjusted_year}'
    -- J'ai calculé la date du mois suivant à l'aide de 'target_date.replace(day=1, month=(target_date.month % 12) + 1)', stockée dans next_month. Cela nous donne le premier jour du mois suivant.

    -- La fonction vérifie si le mois suivant est inférieur ou égal au mois actuel avec la condition 'if next_month.month <= target_date.month:'. Si c'est le cas, cela signifie que nous avons dépassé l'année précédente, donc elle incrémente l'année de target_date.year + 1 et renvoie le mois suivant. Sinon, elle renvoie simplement l'année actuelle et le mois suivant.

    -- Enfin, la fonction renvoie un tuple contenant l'année ajustée et le mois suivant.

    Quant l'utilisation de cette fontion :
    -- Les années précédente et actuelle sont définies comme previous_year = 2023 et current_year = 2024.
    -- En utilisant la fonction adjust_year, un dictionnaire month_mapping est créé pour mapper les noms des mois aux dates ajustées pour les années précédente et actuelle.

Discussions similaires

  1. Droit aux informations contenues dans son génome...
    Par Bonnes vibrations dans le forum Psychologie sociale
    Réponses: 24
    Dernier message: 10/10/2022, 20h13
  2. comparer deux dataframe python
    Par sam2022 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 12/09/2022, 11h21
  3. récupèration de données contenues dans un fichier texte
    Par invite9bb2028b dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 14/08/2015, 14h11
  4. Comment exporter MATLAB, mes résultats trouvés dans FEMM.
    Par said76 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 13/04/2013, 21h37
  5. Comment exporter des valeurs dans un tableau à Excel
    Par inviteb1dc4efc dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 05/12/2008, 22h35