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 :

Passage d'un CSV à un dataframe puis à un dictionnaire de dictionnaires


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Par défaut Passage d'un CSV à un dataframe puis à un dictionnaire de dictionnaires
    Bonjour à tous,

    Je suis débutante sur Python et j'ai vraiment du mal avec les passages d'un format d'objet à un autre.

    Je récupère une immense matrice d'environ 220 000 lignes * 9 colonnes d'un fichier CSV via pandas.
    J'obtiens donc un data frame.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     import pandas as pd
    toto = pd.DataFrame
    data_test = pd.DataFrame(pd.read_csv('anabena.csv', sep=";"))
    data_test = data_test.drop(columns='Unnamed: 8')
    Voici mon fichier importé :
    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
     
             ID       FWS    SWS HS FL Red HS FL Orange HS    SWS LS  FL Red LS  \
    0         0         0         0         0            0         0          0   
    1         0         0         0         0            0         0          0   
    2         0  8,545183  97,65923  30,36592     3,967407  4,882962  0,7629628   
    3         0  11,59703  131,3822  39,97925     5,035554  6,103702    1,22074   
    4         0   12,2074  133,8237  39,52147     4,425184  5,951109    1,22074   
    5         0  12,97037  135,0444  39,97925     3,662221  6,103702    1,22074   
    6         0  13,88592  135,0444   41,0474     3,051851  6,408887    1,22074   
        ...       ...       ...       ...          ...       ...        ...   
    220826  592  25,63555  39,67406  7,019258     1,678518  4,577776  0,6103702   
    220827  592   26,5511  62,25776  7,019258     2,136296  5,035554  0,7629628   
    220828  592  27,77184  98,11701  7,019258     2,899259  5,798517  0,7629628   
    220829  592  29,29777  148,1674  6,714072     3,662221  7,019258  0,7629628   
    220830  592   30,6711  207,5259   6,56148     4,272592  8,087405  0,7629628   
    220831  592  31,58666  263,5273   6,56148     4,272592  9,155553  0,7629628   
    220832  592  31,89184  299,3866  6,408887     3,814814  9,918516  0,7629628

    Je n'arrive pas à ensuite créer un nouvel objet (ou plusieurs) contenant pour chaque ID l'ensemble des points lui correspondant. En fait, j'ai 8 colonnes avec un nombre de points variables pour chaque ID et je n'arrive pas à grouper tous les points de chaque colonne dans un seul objet correspondant à l'ID.

    J'ai essayé de passer en dictionnaire, en liste mais je dois certainement mal m'y prendre. J'ai surtout utilisé pandas mais honnêtement je ne comprends pas comment cela fonctionne. Après je me suis dit que je pouvais faire un dictionnaire de dictionnaire mais je ne trouve pas comment le fabriquer...

    Sous R, j'utilise la fonction by qui me détecte les valeurs d'ID et qui me fait une liste contenant 8 listes pour chaque ID. Peut être connaissez vous un équivalent Python ?

    En vous remerciant,

  2. #2
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Par défaut Fonction GroupBy de pandas
    Re-bonjour,

    A croire que vous exposer mon problème calmement m'a ouvert un peu les yeux. Après 1 semaine à me débattre avec les milliers de méthodes python, je pense avoir trouvé la solution. Si cela peut servir :

    Dans pandas, il existe une méthode groupby qui prend un dataframe et le sépare selon un critère, un peu comme le GroupBy en SQL.

    Par contre, on ne peut pas utiliser le GroupByObject comme un objet normal... je voudrais donc repasser mes groupes en différents objets. Si vous avez une idée je suis preneuse...

    Bonne journée à tous

  3. #3
    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
    Fournit un code qui tourne si tu veux que l'on puisse t'aider correctement.

    Car là si je prend ton code j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: labels ['Unnamed: 8'] not contained in axis

    Ensuite c'est possible de tranformer des dataframes en dict mais pandas possède déjà plein de fonctions et il serait donc plus judicieux de les utiliser pour exploiter vos data plutot que de copier ses données dans une autres structures (surtout s'il y en a beaucoup, je ne vous raconte pas le coût de calcul de votre code)....

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Sauf erreur de ma part, data_test.groupby(...) retourne un object groupby. Il faut ensuite appeler une méthode comme .max(), ou encore .sum() pour obtenir un tableau contenant respectivement le max ou la somme des occurrences que l'on regroupe.

    Si vous voulez récupérer un sous-tableau contenant que les informations pour un ID en particulier, vous pouvez filter votre dataframe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subset = data_test[data_test['ID'] == 592]
    Vous pouvez lister tous les ID de différentes façons. L'une d'elles serait d'utiliser un set:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ids = list(set(data_test['ID']))
    De là, si vous souhaitez faire un dictionnaire avec en clé un ID et en valeur un tableau, il suffit de combiner les deux.

    Julien

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Par défaut
    Citation Envoyé par Julien N Voir le message

    Vous pouvez lister tous les ID de différentes façons. L'une d'elles serait d'utiliser un set:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ids = list(set(data_test['ID']))
    De là, si vous souhaitez faire un dictionnaire avec en clé un ID et en valeur un tableau, il suffit de combiner les deux.

    Julien
    Merci beaucoup ! Je vais creuser du côté de la combinaison

    Bonne journée

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Fournit un code qui tourne si tu veux que l'on puisse t'aider correctement.
    Merci pour la réponse. Je suis désolée mais l'erreur viens simplement du fait que vous n'avez pas mon fichier de données et que du coup la ligne est obsolète. Cette ligne ne me permettait que de supprimer la dernière colonne vide du tableau.

    Pour la suite, j'ai bien compris qu'il existe tout un tas de fonctions dans pandas mais je cherche a faire de l'analyse fonctionnelle sur ces données et je n'utilise pas trop les stats "classiques". Je ne souhaite pas résumer mon fichier mais le découper pour le changer après. Du coup, je vais quand même continuer de regarder dans pandas ce que je peux faire mais sinon je vais surement en faire un "array"

    En vous remerciant en tous cas pour le temps que vous avez pris,

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/10/2014, 16h14
  2. Passage d'un Long en Hexa puis en Ascii
    Par floflo87 dans le forum C
    Réponses: 10
    Dernier message: 29/04/2013, 15h33
  3. VBScript : Créer puis ouvrir un fichier csv
    Par Stephbzh dans le forum VBScript
    Réponses: 1
    Dernier message: 04/06/2008, 09h36
  4. Réponses: 1
    Dernier message: 09/11/2007, 11h46
  5. Réponses: 1
    Dernier message: 02/11/2006, 10h40

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