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 :

Remove Duplicates and Groupby


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut Remove Duplicates and Groupby
    Bonjour à tous,

    Cela fait 2 bonnes semaines que je code en python. J'ai pas mal progressé mais il m'arrive encore de rester bloquer sur des choses simples. Dans ce cas-ci ça fait plusieurs heures que je te testes plein de truc sur un exemple simple mais rien n'a faire. Je n'arrive pas à avoir ce que je veux.

    Mon problème est le suivant :

    j'ai un fichier .csv avec des adresses emails, domaine et ville.

    ,email,domain,city
    0,g@gmail.com,gmail.com,liege
    1,d@hotmail.com,hotmail.com,bruxelle
    2,o@yahoo.fr,yahoo.fr,dinant
    3,g@msn.be,msn.be,liege
    4,p@caramail.be,caramail.be,anvers
    5,g@gmail.com,gmail.com,liege
    6,a@ulg.ac.be,ulg.ac.be,liege

    la première étape à réaliser est d'enlever les doublons (dans l'exemple : 5,g@gmail.com,gmail.com,liege).
    J'ai essayer avec , , , un truc avec .... Enfin j'arrive pas a juste l'enlever et avoir un simple tableau du style :

    ,email,domain,city
    0,g@gmail.com,gmail.com,liege
    1,d@hotmail.com,hotmail.com,bruxelle
    2,o@yahoo.fr,yahoo.fr,dinant
    3,g@msn.be,msn.be,liege
    4,p@caramail.be,caramail.be,anvers
    6,a@ulg.ac.be,ulg.ac.be,liege

    (Dans mon cas l'index n'est pas important puisque je le remplacerai par un numero d'identification pour pouvoir faire un lien vers une autre dataframe)

    et la deuxième étape est d'extraire le nom de l'adresse email et puis ensuite de les regrouper pour voir si oui ou non, il y'a un même nom pour plusieurs domaines. example:

    name,domain,city
    g , gmail.com , liege
    , msn.be , liege
    d , hotmail.com , bruxelle
    o , yahoo.fr , dinant
    p , caramail.be , anvers
    a , ulg.ac.be , liege

    Si je regroupe avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df = df.groupby(['email','domain','city'])
    j'obtiens une réponse : <pandas.core.groupb.DataFrame object at 0x3ca68c>
    <class 'pandas.core.groupby.DataFrameGroupby>

    Moi je voudrais qu'il m'affiche par colonne ce que je veux et pas simplement ça. Si j'utilise après ça fonctionne mais il me fait la moyenne des indexes et ça ne m'interesse pas du tout.

    De plus, si j'ai d'autres colonnes, je suppose que pour grouper aussi il faut que je les nomme dans le df.groupby?

    Je suis sur que la solution est simple mais je ne trouve pas les exemples qui colle à ma situation. Une fois que je l'aurai vu une fois ça ira, mais la je bloque un peu.

    Merci de votre aide

    Maxime

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par gerday.m Voir le message
    la première étape à réaliser est d'enlever les doublons (dans l'exemple : 5,g@gmail.com,gmail.com,liege).
    pour moi la première étape c'est plutôt de lire le fichier et savoir sur quoi on travaille/comment sont formatées les données une fois lues par python

    ensuite 5,g@gmail.com,gmail.com,liege n'est pas un doublon, g@gmail.com,gmail.com,liege peut en être un éventuellement, mais alors ça veut dire que la deuxième étape va consister à appliquer un traitement préalable sur les données lues pour pouvoir identifier les doublons, mais à ce stade on ne sait même pas si les index/numéros sont réellement lus dans le fichier ou s'ils sont ignorés etc.

    si tu peux préciser un peu,

    edit: si on part du principe que les données en entrée sont sous cette forme par exemple (une liste de listes) :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    datas = [
       ['0', 'g@gmail.com', 'gmail.com', 'liege'], 
       ['1', 'd@hotmail.com', 'hotmail.com', 'bruxelle'],
       ['2', 'o@yahoo.fr', 'yahoo.fr', 'dinant'],
       ['3', 'g@msn.be', 'msn.be', 'liege'],
       ['4', 'p@caramail.be', 'caramail.be', 'anvers'],
       ['5', 'g@gmail.com', 'gmail.com', 'liege'],
       ['6', 'a@ulg.ac.be', 'ulg.ac.be', 'liege']
    ]
    et que tu te fiche de perdre l'index, une solution possible serait un truc du genre :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> [j.split(',') for j in set([','.join(i[1:]) for i in datas])]
    [
       ['o@yahoo.fr', 'yahoo.fr', 'dinant'],
       ['g@gmail.com', 'gmail.com', 'liege'],
       ['a@ulg.ac.be', 'ulg.ac.be', 'liege'],
       ['d@hotmail.com', 'hotmail.com', 'bruxelle'],
       ['g@msn.be', 'msn.be', 'liege'],
       ['p@caramail.be', 'caramail.be', 'anvers']
    ]

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut
    Merci pour la rapidité de la réponse.

    Alors pour préciser, je lis un fichier .csv qui est très bien structuré. Dans python, je transforme le fichier en DataFrame. j'obtiens mes colonnes avec en-tête et index. Donc j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df = pd.read_csv(monfichier.csv
    )

    les index/numeros sont inclus dans le fichier .csv donc oui ils sont là.


    Et effectivement j'avais pas pris en compte que l'index faisait en sorte que la ligne n'était pas un doublon.....


    Par contre dans ma DataFrame, j'ai pas des liste par ligne mais par colonne. (Je sais pas si je suis clair)

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    ok en fait je viens de comprendre, tu utilises la lib python pandas manifestement que je ne connais pas (mon linux me propose de me l'installer pour la somme dérisoire de 126 autres packages, je passe mon tour )
    si quelqu'un connait il pourra mieux te rencarder en l'essence, ne sachant pas quelle tête à l'objet que tu récupères avec read_csv()

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut
    Aucune souci ^^

    Merci quand même!! Mais tu m'as déjà pas mal aidé en me faisant relever l'erreur que je faisais en essayant de supprimer des doublons qui avaient pas le même index. ça m'aide déjà pas mal.

    EDIT

    ce code fonctionne très bien, dans l'optique ou on a des lignes identiques.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dfip=dfip.drop_duplicates()
    J'ai toujours pas trouvé pour le groupby. Mais après discussion, je n'en aurai probablement plus besoin. Mais toujours bon à savoir, rien que dans l'optique d'une prochaine fois


    Je devrai peut-être recréer un post, mais bon pas envie de flooder le forum python alors que ça ne fait que un jours que je poste. De plus j'ai pas encore épuisé les recherches.
    Mais si quelqu'un sait m'orienté je suis preneur. La question est la suivant

    j'ai une première dataframe avec les index (1,2,3,4). Je veux rajouter a cette dataframe, une autre dataframe avec l'index (6,7,8,9). Comment faire pour ajouter l'index de la deuxième a la première? dans mon cas, les indexes ressemble plus a des nombres a 6 chiffres et ne se suivent pas forcément. (Créer un nouvelle dataframe où j'insère les deux anciennes ça me va aussi)

Discussions similaires

  1. Remove and Sort using
    Par pitch21 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 11/10/2012, 15h29
  2. JPA EntityManager persist() and remove()
    Par aelmalki dans le forum JPA
    Réponses: 2
    Dernier message: 10/08/2011, 16h01
  3. Add and remove un projet seam to tomcat
    Par thierryler dans le forum Seam
    Réponses: 1
    Dernier message: 27/06/2011, 13h53
  4. Add and Remove
    Par dominos dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 28/03/2010, 13h51
  5. duplication et drag and drop
    Par jeandormesson dans le forum Flash
    Réponses: 16
    Dernier message: 26/09/2006, 11h49

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