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

Python Discussion :

Dataframe : Keyerror mais variable existante


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut Dataframe : Keyerror mais variable existante
    Bonjour à tous,

    Je suis actuellement en train de tester le basculement d'un code que j'ai sous SAS sur Python.
    Pour cela, je travaille beaucoup avec des Dataframes.

    Sur l'un de mes dataframes, j'aimerais créer un index sur deux variables 'HHID' et 'TITID'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df.set_index(['HHID', 'TITID'], drop=True, append=False, inplace=True, verify_integrity=False)
    mais j'ai l'erreur suivante :
    Ce que je ne comprends pas car si je fais un export en csv de mon dataframe 'df' juste avant mon set_index, j'obtiens la sortie suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HHID,TITID,Var1,Var2
    48852293,101,1,60
    48852293,109,4,284
    [...]
    et donc avec ma variable présente dans le dataframe

    J'ai le même souci avec 'TITID' si je supprime 'HHID' de l'index...

    Quelqu'un peut-il m'aider?

    Merci d'avance!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Petite avancée : en tapant :
    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Index([u'Var1', u'Var2'], dtype='object')
    Malgré la présence des variables HHID et TTID dans mon fichier, python ne les trouve pas

    J'ai oublié de préciser dans mon premier post que j'apprends Python en autodidacte, donc un peu d'indulgence pour mes questions qui peuvent paraître noobesques!

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Qu'est-ce que "df" ?

    Si c'est une instance de classe, tu peux montrer le code de cette classe ? Ça faciliterait les choses.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    df est mon dataframe créé de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df=df2.groupby(['HHID', 'TITID']).agg({'Var1': np.sum, 'Var2': np.size})
    où df2 est un autre dataframe contenant HHID, TITID, Var1 et Var2
    En sortie de ce code, j'obtiens df, avec, pour un HHID et un TITID, Var1 = somme des Var1 de df2, et Var2, le nombre de Var2.

    J'espère avoir été claire

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    J'en avais peur.

    C'est quoi ce dataframe ? Du code ?

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Est-ce que c'est le dataframe de pandas? (http://pandas.pydata.org/pandas-docs...DataFrame.html)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Oui, c'est le dataframe de pandas.

    mon df2 ressemble à ça :
    HHID TITID VAR1 VAR2
    123 101 12 1
    123 101 25 2
    123 102 50 6

    et df me sort :

    HHID TITID VAR1 VAR2
    123 101 37 2
    123 102 50 1
    (pour rappel, somme sur VAR1 et count sur VAR2)

    C'est quand je fais un export de ce dataframe df que j'ai bien toutes mes variables, mais lorsque je fais , il ne trouve que VAR1 et VAR2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Index([u'Var1', u'Var2'], dtype='object')

  8. #8
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Désolé, je ne connais pas assez pandas pour t'aider, mais pandas a une doc: es-tu sûr d'avoir bien compris ce que fait la méthode keys()?

    http://pandas.pydata.org/pandas-docs...rame.keys.html

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Bonjour tyrtamos,

    Merci pour le lien, mais je pense que j'utilisais dataframe.keys() correctement, car je voulais que ça me retourne la liste des colonnes de mon dataframe.
    Pour être sûre que mon résultat soit correct, j'ai fait la même chose en remplaçant ".keys()" par "columns" et j'obtiens le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Index([u'Var1', u'Var2'], dtype='object')
    Malgré la présence de mes variables, python ne retrouve pas HHID et TITID.

    Est-ce que cela pourrait être dû à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df=df2.groupby(['HHID', 'TITID']).agg({'Var1': np.sum, 'Var2': np.size})
    et par le fait que le groupby donne un "statut" spécial à mes variables HHID et TITID, de sorte que celles-ci ne soient plus retrouvées?

    Merci à ceux qui m'aident et qui m'aideront!

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    up

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par meuah Voir le message
    up
    Pandas est une des nombreuses bibliothèques scientifique accessible depuis Python. Pour vous aider, il faudrait qu'un des lecteurs du forum pratique cette bibliothèque assez bien et que vous montriez un peu plus de code pour comprendre ce que vous cherchez à faire.
    note: imaginez qu'on s'amuse à installer Pandas juste pour voir, un code qui permette à partir de là de reproduire ce que vous constatez est un minimum.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Je pensais avoir été claire car je n'ai que qq lignes de code, alors je reprends.
    J'ai une table en entrée, issue d'un dataframe que j'ai exporté.
    Je réimporte ce fichier data_ttt.csv (issu d'un autre programme), que je place dans le dataframe pandas df2.
    Sur ce dataframe, je fais un calcul, qui somme ma variable Var1, et compte ma variable Var2, en faisant un groupby sur mes variables HHID et TITID, et place le résultat dans un dataframe nommé df
    et je veux ensuite créer un index sur ce nouveau dataframe df

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import pandas as pd
    import numpy as np
     
    df2= pd.read_csv("data_ttt.csv",sep=",")
    df=df2.groupby(['HHID', 'TITID']).agg({'Var1': np.sum, 'Var2': np.size})
    df.set_index(['HHID', 'TITID'], drop=True, append=False, inplace=True, verify_integrity=False)
    c'est là que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          7 df=df2.groupby(['HHID', 'TITID']).agg({'Var1': np.sum, 'Var2': np.size})
          8 df.to_csv("sortie_groupby.csv", sep=",", header=True)
    ----> 9 df.set_index(['HHID', 'TITID'], drop=True, append=False, inplace=True, verify_integrity=False)
     
    KeyError: 'HHID'
    Voici un extrait de mon jeu de données, présent dans data_ttt.csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ,HHID,TITID,Var1,Var2
    0,54459061,102,31,3
    1,54459061,140,31,3
    2,54459061,140,30,3
    3,54459061,102,81,1
    4,54459061,102,20,1
    5,54459061,140,46,1
    6,54459061,140,39,1
    Et voici ce que j'obtiens lorsque j'exporte df, avant la création de l'index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    df=df2.groupby(['HHID', 'TITID']).agg({'Var1': np.sum, 'Var2': np.size})
    df.to_csv("sortie_groupby.csv", sep=",", header=True) ##### ICI
    df.set_index(['HHID', 'TITID'], drop=True, append=False, inplace=True, verify_integrity=False)
    Résultat de l'export
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HHID,TITID,Var1,Var2
    54459061,102,132,3
    54459061,140,146,4
    Pourquoi ne reconnaît-il pas mon HHID (et mon TITID) alors que ces données sont bien présentes lors de l'export...?

Discussions similaires

  1. Utiliser une variable existante dans une fonction
    Par Damien062 dans le forum Langage
    Réponses: 11
    Dernier message: 26/02/2015, 14h53
  2. Réutiliser variable existante dans try
    Par yasinfo dans le forum Général Java
    Réponses: 5
    Dernier message: 14/10/2014, 01h43
  3. [Débutant] Modifier une variable existante en tant que variable dynamique
    Par Sundark dans le forum C#
    Réponses: 5
    Dernier message: 05/02/2013, 17h34
  4. [MooTools] Détection d'une variable existante
    Par drick35 dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 26/11/2012, 09h22
  5. Réponses: 27
    Dernier message: 27/09/2008, 22h56

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