IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Concatener lignes en colonnes avec .CONCAT [Python 3.X]


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Bidouilleur
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Par défaut Concatener lignes en colonnes avec .CONCAT
    Bonjour à tous,
    Je débute avec Python, j'ai une dataframe composée de plusieurs lignes et disons 5 colonnes, je lit cette dataframe à partir d'un fichier excel.
    Je souhaite réécrire cette dataframe sur une seule ligne en concaténant toutes les autres lignes sur une seule (voir image si c'est pas clair)
    Nom : Capture2.JPG
Affichages : 1191
Taille : 41,5 Ko
    Pour cela, je récupère chaque ligne dans une nouvelle variable, puis je créer une nouvelle dataframe et je concatène toutes les variables ensemble sur une ligne.
    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Selectionner une ligne en donnant son nom et sa colonne--------
        first = data.loc[data["produit"]=='Ligne1']
        second = data.loc[data["produit"]=='Ligne2'] ... 
        #--- Concaténer 
        df = pd.concat([first, second], axis=1 , ignore_index=0 )
    Mon problème est que ça me donne ça, j'ai joué avec les index, et les autres paramètres mais je sèche. si vous avez des idées ou d'autres méthodes pour faire ça.
    Nom : Capture3.JPG
Affichages : 967
Taille : 28,1 Ko

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Une solution comme ca, mais il y peut etre mieux

    1) vous récupérer le tableau de votre dataframe (les données chiffrées) dans une variable qui stocker le numpy array.
    2) Vous faites un reshape sur cet array
    3) Vous récupérez du dataframe d'origine, le titre des colonnes dans une liste.
    4) Vous étendez cette liste autant de fois que vous avez de ligne
    5) Vous créez un nouveua dataframe avec l'array reshapé, et les labels de colonnes démultipliés.

  3. #3
    Membre confirmé
    Profil pro
    Bidouilleur
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Par défaut
    Bonjour,
    Merci pour ta réponse, je vais essayer cette méthode pour avancer, mais je reste étonné qu'on ne puisse pas le faire directement et proprement avec pandas.
    Si d'autres personnes ont une idée ?

  4. #4
    Membre confirmé
    Profil pro
    Bidouilleur
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Par défaut
    Bonjour,
    ta méthode fonctionne lg_53 encore merci.
    Pour les gens qui vont tomber sur cette question, je vous partage le code que j'ai fait, il n'est surement pas optimisé (j'ai mis pleins de commentaires dans mon code, j'y reviendrai surement plus tard pour voir si je peux l'optimiser)
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ### Construire la header du fichier 
    ColList = df.columns  # récupérer les nom des colonnes dans une liste
     
    # concaténer X fois cette liste, X étant égale au nombre de lignes de mon tableau
    header = ColList
    x=0
    while x<(len(df)-1):
      header = header.append(ColList)
      x=x+1
     
    header = pd.DataFrame(header).T   # Transformer en DataFrame et transposer pour qu'il soit en horizontal
     
    ### Construire le corps de la data
     
    Tableau = df.to_numpy()      # Transformer mon DataFrame en Array
    Tableau = Tableau.reshape(1, len(ColList)*len(df))   # Reshape en une ligne et le bon nombre de colonnes
     
    Corps = pd.DataFrame(Tableau) # Transformer en DataFrame
     
    Finaldf = pd.concat([header, Corps], axis=0, ignore_index=1)
    Finaldf
    ça donne ça au final ;
    Nom : Capture.JPG
Affichages : 912
Taille : 20,5 Ko

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Re

    Dans le code que vous présentez, la variables "colonnes" n'est pas définie.
    Il existe peut être une solution plus directe, mais s'il n'en existe pas ceci ne m'étonnerait pas. Car c'est quand même une façon très étrange de "ranger" ses données sur une seule ligne, et d'avoir autant de fois que nécessaire la répétition des labels. La structuration naturelle aurait été d'avoir seulement 4 colonnes avec plusieurs lignes.

  6. #6
    Membre confirmé
    Profil pro
    Bidouilleur
    Inscrit en
    Avril 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2006
    Messages : 145
    Par défaut
    Effectivement, j'ai corrigé dans le code.
    en fait ce que je souhaite faire c'est comparer plusieurs jeux de données, et chaque jeu de données est dans un fichier qui a la forme de mon premier tableau.
    ça peut être un fichier par magasin et pour chaque magasin les produits qu'ils vendent, donc je peux comparer les ventes de plusieurs magasins sur un seul produit, et visuellement c'est plus simple d'avoir plusieurs lignes.
    Nom : Capture.JPG
Affichages : 913
Taille : 59,4 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/07/2016, 21h05
  2. Transformer une ligne en colonne avec talend
    Par pekre dans le forum Développement de jobs
    Réponses: 15
    Dernier message: 25/02/2015, 02h04
  3. copie ligne en colonne avec passage ligne automatique
    Par John Parker dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/10/2011, 10h37
  4. [XL-2007] Lignes en colonnes avec regroupement selon note
    Par Blondain dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/11/2010, 11h06
  5. Réponses: 2
    Dernier message: 13/01/2009, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo