Pandas : de Zéro à Héros

Dec 11 2022
Un article complet que vous pouvez lire tout en regardant votre télévision préférée pendant la journée, mais assez bon pour vous apprendre tout ce que vous devez savoir pour faire le travail. Pandas est une bibliothèque d'analyse et de traitement de données en Python.

Un article complet que vous pouvez lire tout en regardant votre télévision préférée pendant la journée, mais assez bon pour vous apprendre tout ce que vous devez savoir pour faire le travail.

Commencer

Pandas est une bibliothèque d'analyse et de traitement de données en Python. Pandas est largement utilisé pour la science des données et l'apprentissage automatique. Il est développé au-dessus d'un autre package Python appelé NumPy, qui est utilisé pour le calcul scientifique. Si vous ne savez pas grand-chose sur NumPy, vous voudrez peut-être le vérifier rapidement en lisant mon article de 5 minutes avant de continuer avec Pandas. Ce n'est pas un incontournable mais je le recommande vivement.

Pour commencer, assurez-vous d'abord que vous avez Python, NumPy et Pandas dans votre système. La façon dont vous l'obtenez dépend de votre système et de l'IDE de votre préférence, mais je recommande Anaconda. Avec l'installation de base d'Anaconda, vous pouvez simplement accéder au terminal et exécuter "conda install numpy", puis "conda install pandas" et le tour est joué !

Maintenant, créons un fichier example.py pour commencer à travailler.

Remarque : Si nous devions créer un projet au lieu d'un seul fichier d'exemple avec lequel travailler, nous devrions simplement créer un répertoire et un fichier __init__.py à l'intérieur.

Vous devez ajouter les lignes suivantes en haut du fichier afin de pouvoir travailler avec Pandas dans le fichier.

importer numpy en tant que np

importer des pandas en tant que pd

Remarque : Nous importons généralement NumPy en tant que np et Pandas en tant que pd afin de ne pas avoir à taper numpy & pandas à chaque fois que nous appelons une fonction à partir des bibliothèques. Gardez à l'esprit que bien que cela puisse être modifié, np et pd sont la convention générale.

Après cela, vous pouvez exécuter le code dans le fichier d'exemple en accédant simplement au terminal et en exécutant la commande :

exemple python.py

Série

De la même manière que n'importe quel langage de programmation a des tableaux, de la même manière que NumPy a des matrices, nous obtenons des séries dans Pandas. La principale différence entre les séries et les matrices/tableaux ordinaires est que les éléments d'une série peuvent avoir un numéro d'index ou des clés pour accéder à cette valeur. Considérez-le comme une liste de paires clé-valeur comme des données JSON.

Fait amusant : Pandas est souvent exprimé comme « Excel pour la science des données » en raison du fait qu'il économise de la valeur - des paires de clés, les affiche visuellement et effectue des calculs sur celles-ci de la même manière que MS Excel.

Vous pouvez créer une série Pandas à partir d'un dictionnaire Python :

monDictionnaire = { "Jean" : 35, "Jeanne" : 40}

pd.Series(myDictionary) // renvoie John 35, Jane 40

Si vous deviez ajouter un tableau au lieu d'un dictionnaire, les éléments de la série auraient des entiers comme clés :

monTableau = [ 35, 40]

pd.Series(myArray) // renvoie 0 35, 1 40

Vous pouvez ajouter deux tableaux ensemble et en créer une série comme suit :

monTableau1 = [ 35, 40]

monTableau2 = [ "Jean", "Jeanne"]

pd.Series(data= myArray1, index=myArray2) // renvoie John 35, Jane 40

S'il existe deux séries différentes avec les mêmes clés, vous pouvez effectuer des opérations mathématiques sur celles-ci comme :

series1 = pd.Series({ "John" : 35, "Jane" : 40})

series2 =pd.Series({ "Jean" : 100, "Jeanne" : 50})

seriesSum = series1 + series2 // renvoie John 135, Jane 90

Remarque : lors de l'exécution d'une opération mathématique sur des séries avec des clés différentes, les clés correspondantes auront le résultat de l'opération comme valeur, mais les clés qui ne correspondent pas auront une valeur de NaN car il n'y aura aucun résultat pour ces clés.

Trames de données

Les trames de données peuvent être considérées comme une série mais pour les matrices. Fondamentalement, une matrice où les index sont des clés et le tout est une paire clé-valeur est appelée une trame de données.

Vous pouvez créer un bloc de données à partir de n'importe quel tableau ou matrice comme :

maMatrice = [ [10, 20, 30], [ 100, 200, 300] ]

dataFrame = pd.DataFrame(myMatrix)

Vous pouvez attribuer des clés de colonnes et de lignes comme :

maMatrice = [ [ 1, 2, 3],[10, 20, 30], [ 100, 200, 300] ]

rangées = [ "John", "Jane", "Sarah" ]

colonnes = [ "Tennis", "Basketball", "Pingpong"]

dataFrame = pd.DataFrame(myMatrix, index = lignes, colonnes = colonnes)

Vous pouvez appeler une certaine colonne du bloc de données comme :

dataFrame[ "Tennis" ]

Cependant, si vous deviez appeler une ligne avec la clé comme indiqué ci-dessus, cela générerait une erreur. Vous pouvez appeler une ligne avec la clé comme :

dataFrame.loc[ "Jean" ]

Le fait qu'il existe des clés pour appeler les colonnes et les lignes ne signifie pas qu'il n'y a pas d'index. Tout comme dans les matrices, les index existent toujours. Vous pouvez, par exemple, appeler la première ligne comme suit :

dataFrame.iloc[1] // renvoie la ligne Jane avec les valeurs 2, 20, 200

Vous pouvez ajouter une nouvelle colonne au bloc de données comme :

dataFrame[ "Football" ] = [ 1000, 2000, 3000]

Inversement, vous pouvez supprimer une colonne ou une ligne du bloc de données comme :

dataFrame.drop( "Football", axis=1, inPlace=True) // pour supprimer une colonne, vous devez définir l'axe sur 1

dataFrame.drop( "John", axis=0, inPlace=True) // pour supprimer une ligne, vous devez définir l'axe sur 0

Remarque : Pandas ne veut pas que vous modifiiez par erreur une colonne ou une ligne entière. Peut-être essayez-vous de créer un autre bloc de données et de définir l'ancien bloc de données avec une colonne manquante au lieu de modifier l'ancien ? Donc, pour nous assurer que vous modifiez réellement le bloc de données lui-même, nous avons placé le paramètre inPlace=True dans les fonctions.

Vous pouvez appeler une valeur de cellule comme :

dataFrame.loc[ "Jean", "Tennis"]

Vous pouvez éliminer dans les blocs de données comme :

dataFrame[ dataFrame[“Tennis”] > 5]

// supprimera les lignes où la valeur de la colonne Tennis est inférieure à 5, donc supprimera la ligne John

Pour modifier les index dans un bloc de données, vous devez d'abord ajouter le nouveau tableau d'index en tant que colonne à l'ancien bloc de données. Ensuite, vous pouvez le capturer par le nom de la colonne et lui attribuer ses valeurs en tant que nouveaux index comme :

dataFrame.set_indexes("Nouvelle colonne d'index", inPlace=True)

Un bloc de données multi-index ressemble à ceci dans Excel :

Ici, il y a deux index pour les lignes, Fruit & Vegetable ET le nom du produit. Nous pouvons également créer des multi-index comme celui-ci via Pandas. Pour ce faire vous devez :

  • Définissez deux listes d'index externes et d'index internes, puis combinez-les en une liste d'utilisation de tuples et des méthodes zip.
  • Utilisez ensuite la méthode MultiIndex.from_tuples() pour transformer le tuple en un multi-index.
  • Créez ensuite une liste de colonnes.
  • Après cela, créez une liste des données sous forme de matrice et transformez-la en une matrice à l'aide de la méthode np.array().
  • Enfin, utilisez la fonction DataFrame() de Pandas pour créer la trame de données avec multi-index.

externalIndexes = [ "Légumes", "Légumes", "Frutis", "Fruits"]

innerIndexes = [ "Tomates", "Concombres", "Oranges", "Myrtilles"]

IndexCombinés = liste( zip( indexextérieurs, indexintérieurs) )

IndexCombinés = pd.MultiIndex.from_tuples(indexcombinés)

listAmountPrice =[ [ 2 USD, 5 livres], [ 1 USD, 3 livres], [ 2 USD, 3 livres], [ 3 USD, 2 livres] ]

numpySeriesAmountPrice = np.array( listAmountPrice )

mesColonnes = [ "Prix", "Montant" ]

multiIndexDataFrame = pd.DataFrame( numpySeriesAmountPrice, index = combinéIndexes, colonnes= myColumns)

Et puis, vous pouvez appeler le montant et le prix des myrtilles comme :

multiIndexDataFrame.loc[ "Fruits" ].loc[ "Myrtilles" ]

Vous pouvez également donner des noms aux colonnes multi-index, comme ceci :

multiIndexDataFrame.index.names = [ "Allée", "Nom du produit" ]

Opérations

  • Pour renvoyer un bloc de données à partir du bloc de données d'origine avec les lignes contenant des valeurs NaN supprimées :
  • Pour renvoyer une trame de données à partir de la trame de données d'origine avec les colonnes contenant des valeurs NaN supprimées :
  • Pour renvoyer une trame de données à partir de la trame de données d'origine avec les lignes contenant plus de deux valeurs NaN supprimées :
  • Afin de renvoyer une trame de données à partir de la trame de données d'origine avec les cellules contenant une valeur NaN remplacée par une certaine valeur, disons l'entier 20 :
  • Afin d'exécuter des opérations et de collecter des données sur un bloc de données basé sur une colonne, vous devez regrouper le bloc de données par rapport à cette colonne à l'aide de groupby. Ensuite, vous pouvez effectuer des opérations pour compter les données à l'intérieur, obtenir la moyenne des valeurs, etc.

group.mean() // obtient la moyenne des salaires dans le tableau

group.count() // calcule combien d'employés reçoivent un certain salaire pour chaque salaire

group.describe() // apporte des résultats d'analyse statistique comme la moyenne, les valeurs max et min, etc. pour cette trame de données par rapport à la colonne groupée "Salaire"

  • Si vous avez deux blocs de données ou plus qui ont les mêmes colonnes, vous pouvez les rassembler (l'un sous l'autre) comme ceci :
  • De même, si vous avez deux blocs de données ou plus qui ont les mêmes lignes, vous pouvez les rassembler (l'un sous l'autre) comme ceci :
  • Si vous cherchez à obtenir deux blocs de données ou plus avec des colonnes différentes, vous utiliserez la méthode de fusion comme ci-dessous. Mais gardez à l'esprit que pour pouvoir le faire, tous les blocs de données que vous fusionnez doivent avoir au moins une colonne en commun.
  • Vous ne pouvez apporter que les valeurs uniques d'une colonne dans une base de données comme :
  • Vous pouvez calculer le nombre de valeurs uniques dans une colonne d'un bloc de données comme suit :
  • Vous pouvez définir une fonction et l'appliquer à chaque valeur dans un bloc de données avec la fonction .apply(). Pour expliquer plus en détail dans un exemple :

prix de retour * 1,33 // fonction qui ajoute %33 de taxe au prix d'origine

priceDataFrame[ "Price" ].apply( priceWithTax ) // renvoie une série avec les prix mis à jour

Exceller avec Panda

Même si nous avons travaillé avec les blocs de données et les séries ci-dessus, les données réelles vous seront très probablement transmises sous la forme d'un fichier Excel.

Afin de pouvoir travailler avec un fichier Excel, assurez-vous de l'enregistrer exactement dans le même répertoire que celui où se trouve votre fichier python (le fichier python dans lequel vous exécuterez vos fonctions et opérations Pandas). Ensuite, vous pouvez importer votre fichier Excel en tant que :

myDataFrame = pd.read_excel( "myExcelFile.xlsx" )

Les fichiers Excel seront importés en tant que type DataFrame par défaut, vous êtes donc prêt à partir !

Conclusion

Il existe de nombreuses autres fonctions prédéfinies et structures faciles à utiliser dans Pandas dont vous pourriez avoir besoin en fonction de la tâche, mais cela devrait suffire pour vous aider à faire le travail. Si vous recherchez une carrière entière dans ce domaine ou si vous souhaitez en savoir plus, vous pouvez continuer à partir de cours ou de recherches de niveau avancé lorsque vous rencontrez un besoin pour autre chose (quelque chose de plus intelligent !) tout en travaillant sur une tâche. Pandas a une solution pour presque tout !