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.
Index
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.
J’ai, en plus de 15 ans, accumulé une solide expérience autour de projets variés d’intégration (données & applicatives). J’ai en effet travaillé au sein de neuf entreprises différentes et y ai successivement adopté la vision du fournisseur de service, du client final et de l’éditeur de logiciels. Cette expérience m’a naturellement conduit à intervenir dans des projets d’envergure autour de la digitalisation de processus métiers et ce principalement dans des secteurs d’activités tels que l’assurance et la finance.
Passionné d’IA (Machine Learning, NLP et Deep Learning), j’ai rejoint BluePrism en 2019 en tant que consultant solution avant-vente, où je combine mes compétences en la matière avec l’automatisation afin d’aider mes clients à robotiser de manière plus performante des processus métiers parfois complexes. En parallèle de mon activité professionnelle, j’anime ce blog dans le but de montrer comment comprendre et analyser des données le plus simplement possible.
Apprendre, convaincre par l’argumentation et transmettre mon savoir pourrait être mon triptyque caractéristique.
3 Replies to “Python Pandas – Tuto (Partie N°2)”