2017-07-24 1 views
0

Il y a 10 colonnes dans mon fichier csv. Je voudrais faire correspondre Bird et Mail lignes si l'oiseau du client est un perroquet Je vais prendre ce courrier et l'assigner à un nouveau tableau.Les Pandas Python correspondent en deux lignes et assignent un nouveau tableau si l'instruction est vraie.

Pour l'instant, ce code trouve les mails qui correspondent à Bird, je peux l'imprimer avec Print(row['Mail']) mais je ne peux pas l'assigner à un nouveau tableau. Si j'essaie comme ça, il est dit:

TypeError: 'type' object does not support item assignment,

Je pense que cette rangée change pour flotter c'est le problème.

Je les veux en tant que tableau parce que je vais utiliser ce tableau comme une liste de courrier, c'est pourquoi aussi je veux éliminer les mêmes valeurs et ajouter entre eux ; en tant que séparateur.

Nous vous remercions de votre aide et de vos conseils. Voici le code:

import pandas as pd 

df = pd.read_csv("Reports.csv", sep='\s*,\s*', engine='python', encoding="ISO-8859-2") 
df1 = df.loc[:, :'Bird'] 
x=0 
for index, row in df1.iterrows(): 
    if row['Name'] == 'Parrot': 
     for x in df1.iterrows() : 
      list[:1]=row['Mail'] 
      x =+ 1 
print(list) 

données Exemple:

  somecolumn1  Mail   somecolumn2 somecolumn3 Bird 
    1    [email protected]          Parrot           
    2    [email protected]          aaa 
    3    [email protected]          Parrot 
    4    [email protected]          zzzz 
    5    [email protected]          Parrot     
    6      NaN           Parrot      
    7    [email protected]          Parrot 
    8    [email protected]          dddd 

Donc, pour être exact, je voudrais créer une sortie comme celui-ci et d'éliminer les duplications (car il existe Parrot dans ces mails):

[email protected]; [email protected]

+0

Pouvez-vous les données post-échantillon? –

+0

Vous décrivez comment la table est orientée. Je (nous) voulons des exemples de données pour tester la solution que nous proposons. https://stackoverflow.com/help/mcve –

+0

Merci, je l'ai ajouté à ma question. –

Répondre

0
';'.join(df.loc[(df.Bird == 'Parrot')].Mail.dropna().drop_duplicates().tolist()) 

Cette volonté:

  1. Sélectionnez uniquement les lignes où Parrot apparaît dans la colonne Bird
  2. Extrait la valeur de la colonne Mail
  3. Supprimer les valeurs vides (NaN)
  4. supprimer les doublons valeurs
  5. Transformez-le en list
  6. Concatenate toutes les valeurs de cette liste et les séparer par un point-virgule
+0

C'est incroyable, ça fonctionne parfaitement comme je le voulais et avec une bonne explication. Vous avez fait cela en peu de temps. Merci beaucoup. –

0
array_data = df.loc[df['Bird']=='Parrot', 'Mail'].tolist() 

espoir t Son va t'aider.