Python Pandas – Tuto (Partie N°2)

Partager cet article

Cet article fait suite à la première partie de mon tutoriel sur la librairie Python Pandas. L’idée ici est d’aller plus loin dans la découverte de cette librairie et notamment donner les clés sur les manipulations ensemblistes qu’elle propose. Pour faire simple, vous avez des DataFrame mais vous aller devoir les combiner ensemble afin de travailler vos caractéristiques. Bref vous aller vouloir faire du « SQL like » sur vos données ! Bonne nouvelle, cette librairie vous le permet et ce, de la plus élégante et simple des manières.

Préparons notre jeu de données

Pour ce tuto nous allons créer deux matrices A et B:

import pandas as pd
A = pd.DataFrame({'Col1': [1, 2, 3],
                  'Col2': [4, 4, 6]},
                 index=['rowA1', 'rowA2', 'rowA3'])
print("Matrice A\n", A)
B = pd.DataFrame({'Col1': [1, 3],
                  'Col3': [7, 8],
                  'Col4': [9, 10]},
                 index=['rowB1', 'rowB2'])
print("\nMatrice B\n", B)

Les voici :

Matrice A
        Col1  Col2
rowA1     1     4
rowA2     2     4
rowA3     3     6

Matrice B
        Col1  Col3  Col4
rowB1     1     7     9
rowB2     3     8    10

Décompter les valeurs d’une colonne

La méthode value_counts() apposée à une colonne d’un DataFrame permet de lister les valeurs de cette colonne avec leur nombre d’occurences :

A["Col1"].value_counts()
3    1
2    1
1    1
Name: Col1, dtype: int64

Parcourir les lignes d’un DataFrame

Il peut être parfois utile de parcourir ligne après ligne un DataFrame. pour celà Pandas propose deux itérateurs iterrows() et itertuples (). Ces deux méthodes ont leur subtilité comme itertuples() qui est supposé être plus rapide que iterrows(), ou iterrows() pourrait ne pas correspondre d’une ligne à l’autre. Bref je vous conseille de bien regarder la documentation Pandas avant de vous lancer dans cette voie.

Pour itérer donc, vous pouvez donc utiliser :

for index, ligne in monDataFrame.iterrows():
    print (ligne["Colonne X"])

Filtrer les lignes d’un DataFrame

Le filtrage est une action indispensable dés lors que l’on manipule des jeux de données. Pour celà on dispose de deux méthodes l’une Python et l’autre via Pandas.

B.loc[B['Col3'] == 7]

ou plus simplement

B[B['Col3'] == 7]

Dans les deux cas on filtre le DataFrame sur la colonne ‘Col3’ qui a pour valeur 7.

On peut bien sur combiner plusieurs conditions mais attention de ne pas utiliser les opérateurs booléens and et or dans ce cas mais & et | à la place:

B.loc[(B['Col3'] == 7) | (B['Col3'] > 1)]['Col1']
B.loc[(B['Col3'] == 7) & (B['Col3'] > 1)]['Col1']

Maintenant on peut utiliser la méthode filter des DataFrame Pandas. Elle ne rend pas exactement les mêmes services mais peut s’évérer très pratique pour faire un like par exemple :

A.filter(like='A3', axis=0)

Jointures

Pour ce faire rien de plus simple utilisez la méthode merge et précisez le mode de jointure:

  • INNER : jointure stricte
  • LEFT : jointure gauche
  • RIGHT: jointure droite
  • OUTER : full outer
pd.merge(A, B, how='inner', on='Col1')

Union

Pour ce faire rien de plus simple utilisez la méthode concat:

pd.concat([A, B])

Group By

La méthode groupby permet de regrouper des lignes sur un critère et d’effectuer des opérations sur les colonnes. C’est exactement ce que fait le Group By du SQL.

print ("Group By / Count:\n ", A.groupby("Col2")['Col1'].size(), "\n")
print ("Group By / Moyenne:\n ", A.groupby("Col2")['Col1'].mean(), "\n")

Il est possible de préciser plusieurs transformations sur un même groupement :

# Multiple opérations
import numpy as np
A.groupby('Col2').agg({'Col1': np.mean, 'Col2': np.size})

Téléchargez ou consultez le notebook Jupyter avec les exemples ci-dessus sur GitHub.

Partager cet article

3 Réponses a “Python Pandas – Tuto (Partie N°2)”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

dix-sept + onze =

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.