Python >> Tutoriel Python >  >> Python Tag >> Pandas

Comment filtrer les lignes et sélectionner les colonnes dans un cadre de données Python avec Pandas

Pour un data scientist, pandas est une bibliothèque indispensable pour modifier les données. Il est essentiel et attendu dans de nombreux autres travaux qui traitent des données à l'aide de Python. Mettons-nous au courant de tous les outils puissants offerts par pandas !

Python est l'un des langages de programmation les plus utilisés aujourd'hui. La capacité à travailler avec des données est très recherchée, et les emplois de scientifiques de données, d'analystes de données et d'ingénieurs en apprentissage automatique sont très populaires.

Il y a beaucoup de compétences que les data scientists doivent avoir sous leur ceinture. Si vous êtes débutant ou ne savez pas par où commencer, Introduction à Python pour la science des données est le cours parfait pour vous. Vous pouvez rapidement acquérir les compétences nécessaires pour commencer à chercher le travail de vos rêves ! Ou si vous connaissez déjà Python et que vous cherchez à améliorer et à développer vos connaissances, vous pouvez suivre notre parcours Data Science.

Avant de créer des modèles d'apprentissage automatique ou d'utiliser autrement les données collectées, vous devez effectuer une exploration préliminaire et un nettoyage des données. Étant donné que les données tabulaires sont le type de structure de données le plus courant, il est tout à fait logique d'utiliser des pandas pour accomplir ces tâches.

La série chronologique est un autre type important de structure, obtenue en enregistrant les observations d'un phénomène à plusieurs reprises dans le temps. Ce type de données est largement utilisé, par exemple, dans les finances et les prévisions météorologiques.

Pour obtenir des informations à partir de données de séries chronologiques, il est important de savoir comment les visualiser correctement. Nous ne couvrirons pas les séries chronologiques ici, mais cet article de mon collègue Usman peut vous aider à visualiser ces données.

Opérations Pandas les plus utilisées

Une visite complète des pandas serait une tâche trop ardue à accomplir avec un seul article. Au lieu de cela, nous passerons en revue les fonctionnalités les plus courantes des pandas et certaines tâches auxquelles vous êtes confronté lorsque vous traitez des données tabulaires.

Comme je l'ai mentionné, la toute première chose à faire face à un nouvel ensemble de données est une exploration et un nettoyage. L'aspect nettoyage consiste à éliminer les parties indésirables des données et à traiter les entrées de données manquantes.

Pour tous les exemples de cet article, nous utilisons un ensemble de données d'étudiants. Commençons par l'exploration - nous commençons par jeter un coup d'œil dans l'ensemble de données.

Indexation des lignes avec Pandas

Disons que nous avons les données dans un fichier appelé "Report_Card.csv". Nous pouvons utiliser l'extrait de code suivant pour lire les données, puis afficher quelques entrées en haut ou en bas des données.

import pandas as pd
Report_Card = pd.read_csv("Report_Card.csv")
Report_Card.head(3)

Cet extrait renvoie les 3 premiers éléments à partir du haut du bloc de données. C'est une bonne idée d'utiliser head() ou tail() pour jeter un coup d'œil à de grands ensembles de données et planifier notre exploration. Ce dernier, comme vous l'avez peut-être deviné, est utilisé pour imprimer des éléments à partir du bas du bloc de données.

Le résultat de cet extrait est le suivant :

Nom Classe Conférence Note Devoirs 0Cindy LarsDHistoire963.0 1Siya VuDMathématiques722.0 2Billy KeyAAllemand891.0

Remarquez que nous avons des nombres tels que 0 et 1 comme indices. Si nous savons déjà quelles lignes nous voulons, nous pouvons simplement utiliser le iloc propriété d'un bloc de données pour spécifier les lignes par leurs indices. Cette propriété nous permet d'accéder à un groupe de lignes et de colonnes par leurs positions entières. En d'autres termes, nous pouvons travailler avec des indices comme nous le faisons avec n'importe quoi d'autre en Python.

Disons que nous voulons la rangée appartenant à Siya Vu. Nous pouvons simplement utiliser :

Report_Card.iloc[1]

Pour obtenir le même résultat que head(3) , nous pouvons utiliser une indexation basée sur la plage comme ceci :iloc[0:3] .

Si nous voulons obtenir des informations spécifiques sur des étudiants spécifiques et que nous connaissons déjà leurs numéros d'index, nous pouvons utiliser iloc avec des arguments pour les colonnes et les lignes :

Report_Card.iloc[[7,4,12],0:3]

Gardez à l'esprit que vous pouvez utiliser un tableau d'indices ou simplement des plages. L'extrait de code ci-dessus renvoie les 7e, 4e et 12e lignes indexées et les colonnes 0 à 2 incluses. Si nous omettons le deuxième argument de iloc ci-dessus, il renvoie toutes les colonnes.

Indexation des colonnes avec des pandas

Disons que nous aimerions voir la moyenne des notes de notre école à des fins de classement. Nous pouvons extraire le Grades colonne du bloc de données. Utilisation de Report_Card["Grades"] renvoie la colonne entière. On peut alors appliquer la fonction mean() à la colonne et obtenez la valeur 72.3789 .

Si nous étions le directeur de cette école imaginaire, nous comparerions peut-être les notes moyennes par classe pour savoir où nous pourrions nous améliorer. Pour cela, nous avons besoin à la fois du Grades et Class Colonnes; nous pouvons les obtenir par indexation. Pour obtenir les moyennes de classe, nous pouvons utiliser l'extrait de code suivant :

class_info = Report_Card[["Grades","Class"]]
class_info.groupby("Class").mean()

La première ligne de code nous donne un nouveau bloc de données avec seulement deux colonnes. Il est important de souligner que nous fournissons une liste de noms de colonnes comme argument puisque nous en voulons plus d'un. Dans la deuxième ligne, nous utilisons le groupby() fonction avec "Class » comme argument. Cela regroupe toutes les lignes contenant la même valeur de classe. Ensuite, en utilisant le mean() fonction sur les groupes nous donne le tableau suivant :

Classe Note A70.06 B76.20 C71.70 D73.13

Il semble que la note moyenne la plus basse provienne de la classe A. Nous pouvons maintenant approfondir cette question pour aider les élèves en difficulté.

Une autre utilisation de l'indexation des colonnes pour obtenir les pièces dont nous avons besoin est celle des plages. Voici un exemple :

Report_Card.loc[:,'Name':'Lectures']
Report_Card.iloc[:,0:3]

Le côlon dans les deux cas signifie "tous".

Vous devez être prudent avec la syntaxe. Avec loc , nous utilisons les noms de colonne et les deux extrémités de la plage sont inclusives. En revanche, avec iloc , nous utilisons des indices numériques et l'extrémité droite de la plage n'est pas inclusive.

Filtrer les lignes en fonction des conditions

Commençons par sélectionner les élèves de la classe A. Cela peut être fait comme ceci :

class_A = Report_Card.loc[(Report_Card["Class"] == "A")]

Nous utilisons la propriété loc, qui nous permet d'accéder à un groupe de lignes et/ou de colonnes par des étiquettes ou un tableau booléen. Cette fois, cependant, nous utilisons ce dernier et écrivons une instruction conditionnelle simple. Le code (Report_Card["Class"] == "A" ) renvoie un pandas.Series objet de False et True valeurs, qui à leur tour sont utilisées pour indexer notre bloc de données principal.

Maintenant que nous avons les élèves de la classe A, nous avons besoin d'un plan pour améliorer leurs performances. Examinons de plus près les élèves dont les notes sont inférieures à la moyenne, disons de 15 points ou plus.

Nous pouvons soit travailler avec le class_A trame de données que nous avons créée ou combiner deux conditions et créer une autre trame de données. Pour les besoins de cet exemple, optons pour l'approche combinée :

class_A_lower = Report_Card.loc[(Report_Card["Class"] == "A") & (Report_Card["Grades"] < 55)]

L'opérateur &est le "et logique" ici, ce qui signifie que nous voulons les lignes où la classe est A et la note est inférieure à 55. Il est important de noter que les deux conditions pour lesquelles nous utilisons l'opérateur &doivent être entre parenthèses. Sinon, Python interprète mal l'expression entière et une erreur est renvoyée. Si à la place, nous avons besoin d'une condition ou l'autre, nous utilisons le | opérateur, connu sous le nom de "ou logique".

Nous pouvons maintenant concentrer nos efforts pour aider ces élèves à améliorer la moyenne de la classe A.

Créer de nouvelles colonnes et appliquer des fonctions

Faire ses devoirs peut être ennuyeux, mais c'est un excellent moyen de revoir et de renforcer les sujets abordés. Continuons à partir de la section précédente et donnons des devoirs supplémentaires aux élèves qui ont des difficultés en classe A.

Ajoutons une nouvelle colonne au Grade_Report bloc de données qui indique le nombre de devoirs supplémentaires que l'élève doit terminer. Étant donné que nous savons déjà combien de devoirs originaux chaque élève a terminés, nous pouvons donner un peu plus à ceux qui ont relâché leurs devoirs originaux !

Tout d'abord, nous définissons une fonction de devoirs très simple.

def extra_hw(homework):
if homework >= 2:
   return 2
elif homework == 0:
   return 6
else:
   return 4

Comme vous pouvez le voir, si l'étudiant a terminé deux devoirs ou plus, nous ne lui en donnons que 2 supplémentaires. Les étudiants qui n'en ont pas terminé sont punis de 6 devoirs supplémentaires, et tous les autres étudiants reçoivent 4 devoirs supplémentaires. Maintenant, nous appliquons cette fonction à chacune de nos lignes et créons une nouvelle colonne indiquant le nombre de nouveaux devoirs que chaque élève doit terminer.

Utilisation du class_A_lower trame de données que nous avons créée précédemment, notre mise à jour des données ressemble à ceci :

class_A_lower["Extra"] = 
class_A_lower.apply(lambda row: extra_hw(row["Homework"]),axis=1)

Cette ligne de code semble un peu intimidante, mais elle est assez simple. Nous utilisons les pandas apply() avec un lambda fonctionner comme un argument. Le lambda la fonction utilise notre extra_hw() fonction sur le Homework colonne pour créer le nouveau Extra value pour chaque rangée. L'argument supplémentaire axis=1 signifie que nous appliquons cette fonction lambda de manière rangée. Le apply() La fonction est un moyen très efficace de modifier les lignes de notre bloc de données ; il surpasse largement l'itération sur l'ensemble de l'ensemble.

Reprenons un autre exemple. L'école attribue une adresse e-mail à chaque élève en fonction de son nom et de son fournisseur de messagerie. Nous pouvons utiliser le bloc de données dont nous disposons déjà pour créer cette colonne supplémentaire en combinant deux colonnes existantes. L'extrait de code suivant atteint cet objectif :

Report_Card["Email"] = (Report_Card["Name"].str.lower()).str.replace(" ", ".") + "@" + Report_Card["Domain"].str.lower()

Lors de l'application de fonctions de chaîne à un pandas.Series objet, nous devons d'abord utiliser str pour accéder à sa valeur de chaîne. Cela crée une colonne avec la structure "[email protected] » pour chaque élève. Si nous rencontrions une situation dans laquelle nous ne disposions que des adresses e-mail des étudiants, nous pourrions facilement les remettre dans les deux colonnes d'origine en divisant la colonne e-mail comme suit :

Report_Card[["Name2","Class2"]] = Report_Card["Email"].str.split("@", n=1, expand=True)
(Report_Card["Name2"].str.replace("."," ")).str.capitalize()

Vous connaissez maintenant les bases des pandas !

Toutes nos félicitations! Vous avez fait votre premier pas vers la maîtrise du module pandas en Python. Il existe de nombreuses autres fonctions impressionnantes que nous pouvons examiner, mais cela rendrait cet article beaucoup trop long ! La plupart des fonctionnalités les plus avancées des pandas s'appuient sur ce dont nous avons discuté dans notre exemple de jouet et n'utilisent pas trop d'idées différentes de celles de base.

Puisque vous avez appris à nettoyer et à analyser les données à l'aide de pandas, la prochaine étape logique consiste à apprendre à présenter vos résultats. Étant donné que vous présentez souvent vos résultats à des personnes sans expérience en programmation, une approche plus visuelle est nécessaire. Si vous souhaitez perfectionner vos compétences en visualisation, nos articles qui vont au-delà de Matplotlib sont exactement ce qu'il vous faut. La première et la deuxième partie suffisent pour vous donner l'avance dont vous avez besoin pour créer des graphiques et des visuels étonnants.

Une autre étape que vous pouvez suivre pour améliorer vos compétences consiste à apprendre à traiter différents types de données. L'un des types de données les plus importants est le datetime variantes. La plupart des débutants en programmation n'ont pas la chance de travailler avec ces types de données, ce qui peut réduire les chances d'obtenir un excellent travail. Mais n'ayez pas peur; nous avons ce qu'il vous faut ! Vous pouvez rapidement rattraper les compétences nécessaires avec notre article sur les objets de date et d'heure.


Post précédent
No