Pandas DataFrame Python : Construire et Filtrer des Lignes
Créez un pandas DataFrame en Python avec pd.DataFrame(data), en utilisant un dictionnaire de listes de longueur égale pour les colonnes et valeurs. Utilisez un DataFrame quand les enregistrements ont besoin de lignes et colonnes étiquetées, d’une sélection de colonnes ou d’un filtrage vectorisé. Un masque booléen filtre les données tabulaires sans écrire de boucle Python. Le résultat conserve les étiquettes d’index d’origine à moins que vous les réinitialisiez explicitement.
Exemple Python Pandas DataFrame Pour Filtrer des Lignes
Sortie :
La sortie apparaîtra ici...
Sortie :
product units
Keyboard 12
Monitor 15
Comment Fonctionne Cet Exemple
import pandas as pddonne au paquet son alias conventionnelpd.- Le constructeur pandas DataFrame transforme chaque clé de dictionnaire en label de colonne. Comme les deux listes contiennent trois valeurs, pandas crée trois lignes et attribue un
RangeIndexpar défaut avec0,1et2. sales["units"] >= 10produit une Series booléenne alignée sur cet index. Repasser le masque àsales[...]conserve seulement les lignes dont la valeur estTrue.to_string(index=False)masque l’index dans le tableau affiché ; il ne supprime pas ni ne renumérote les labels stockés.
Prouver Ce que l’Exécution du DataFrame a Réellement Fait
Exécutez le programme deux fois sur la même page, en ouvrant Run Details après chaque fin. Cela transforme le panneau en expérience de dépendances plutôt que de confondre la durée du démarrage à froid avec un benchmark DataFrame.
| Observation | Runtime à froid | Runtime chaud sur la même page |
|---|---|---|
| Requests | 0 | 0 |
| Paquets nouvellement disponibles | pandas 1.5.3, numpy 1.26.1, python-dateutil 2.8.2, six 1.16.0, pytz 2023.3 | 0 |
| Ce qui a changé | pandas et ses dépendances sont devenus disponibles | le runtime les avait déjà |
web.run détecte import pandas et charge les paquets compatibles avant que le Python de l’utilisateur démarre. Run Details reporte la différence entre les paquets disponibles avant et après cet exécution ; une liste Packages vide lors du démarrage chaud signifie “rien de nouveau chargé”, pas “pandas n’était pas utilisé.”
La durée totale du premier lancement inclut le bootstrap du paquet ainsi que l’exécution Python. Comparez-la avec le démarrage chaud avant d’incriminer pd.DataFrame(...); les temps varient selon la machine et l’état du cache, donc utilisez la liste Packages pour identifier le travail de bootstrap.
Les deux exécutions rapportent zéro requête utilisateur car le dictionnaire et le filtrage restent locaux. L’exécution à froid télécharge quand même des fichiers de paquet comme activité runtime. Donc “pas de requêtes utilisateur” prouve que le snippet n’a fait aucune requête externe, pas que le navigateur a transféré zéro octet.
Le Piège de l’Index Filtré : loc N’est Pas iloc
Filtrer préserve les labels. Ici ready.index.tolist() est [0, 2], même si index=False fait ressembler la sortie à un tableau frais de deux lignes. Le code qui traite la deuxième ligne affichée comme le label 1 échoue :
Incorrect :
second_product = ready.loc[1, "product"] # KeyError: 1
Correct pour la deuxième ligne par position :
second_product = ready.iloc[1]["product"]
Correct quand le code suivant a besoin de labels séquentiels :
ready = ready.reset_index(drop=True)
second_product = ready.loc[1, "product"]
Utilisez .loc pour les labels d’index et .iloc pour les positions à base zéro. Réinitialisez l’index seulement quand les nouveaux labels font partie du résultat souhaité ; sinon, conserver les labels sources aide à retrouver les lignes filtrées dans les données d’origine.
Erreurs de Longueur dans le Constructeur DataFrame
Un dictionnaire de listes doit décrire un tableau rectangulaire. pandas lève ValueError: All arrays must be of the same length plutôt que de deviner comment remplir une colonne courte.
Incorrect :
pd.DataFrame({"product": ["Keyboard", "Mouse"], "units": [12]})
Correct :
pd.DataFrame({"product": ["Keyboard", "Mouse"], "units": [12, None]})
Ajoutez une valeur manquante explicite seulement quand elle représente honnêtement les données ; sinon, corrigez les enregistrements sources avant de construire le tableau.
Quand un DataFrame Est le Bon Conteneur
| Choisir | Quand ça convient |
|---|---|
| DataFrame | Plusieurs colonnes étiquetées ont besoin d’indexation booléenne, d’opérations de colonnes ou d’analyse tabulaire |
| Series | Une dimension étiquetée suffit |
| Liste de dictionnaires | Une petite collection d’enregistrements a besoin d’itération mais pas d’opérations de colonnes |
| Array NumPy | Des données numériques homogènes ont besoin d’opérations matricielles sans labels de ligne ou de colonne |
Un DataFrame justifie son coût en paquet et mémoire quand les labels et les opérations vectorisées simplifient de vraies transformations. Gardez une liste de dictionnaires quand les enregistrements sont petits et n’ont besoin que d’une itération Python ordinaire.