5 techniques pandas puissantes que tout utilisateur de Python devrait connaître
pandas est la première bibliothèque d'analyse de données en Python. Voici quelques choses avancées que j'aime faire avec les Pandas DataFrames pour faire passer mon analyse au niveau supérieur.
Sommaire
Changer l'index d'un DataFrame
Sur de nombreux objets DataFrame, l'index sera généralement une liste croissante de nombres. Si j'ai quelque chose avec des dates, je voudrais souvent changer l'index en quelque chose comme les données et l'heure mentionnées plus tôt. Cela peut être pratique pour tracer des séries chronologiques, telles que les ventes sur une période.
Étant un millénaire, j'adore les avocats. Comme j'aime aussi les données, je me demandais s'il existait un ensemble de données sur les avocats que je pourrais examiner. Heureusement, il y en a sur Kaggle. Après l'avoir téléchargé, je l'ai importé :
avocado = pd.read_csv('stats/data/avocado.csv')
En effet, l'index n'est qu'une liste croissante de nombres sur le côté gauche du DataFrame lorsque j'utilise la méthode head :
avocado.head()
Je peux changer cela avec la méthode set_index :
avocado.set_index("Date")
Cela ne change pas le DataFrame. Vous voudrez l'enregistrer dans une autre variable. Vous pouvez l'enregistrer dans la variable que vous avez créée, mais vous pouvez également utiliser une valeur distincte pour conserver le DataFrame d'origine intact :
avo_date = avocado.set_index("Date")
Cela définit l'index sur la colonne « Date » dans le DataFrame. Maintenant, je veux tracer le prix moyen sur la plage de ces données. Peut-être que cela me donnera la motivation d’économiser pour l’acompte sur une maison.
Tout d’abord, je vais importer Seaborn et l’utiliser pour embellir les graphiques. Je vais l'utiliser pour définir le thème, car il le fait pour n'importe quel tracé Matplotlib, y compris la fonction de traçage des pandas :
import seaborn as sns
sns.set_theme()
avo_date("AveragePrice").plot()
Dans cette série chronologique, notez que l'axe des x est automatiquement défini sur l'index ou la date.
Convertir des tableaux de large en long
Parfois, il est pratique de convertir des tableaux d'un format large en un format plus long. Ceci est principalement destiné à être utilisé pour tracer des séries chronologiques, telles que les données sur les ventes d'avocats.
Si je voulais une répartition des ventes d'avocats par région, je pourrais utiliser la fonction fondre :
avocado.melt(id_vars="type",value_vars="Total Volume").head()
Pour une répartition plus complète classée par ordre décroissant :
avocado.melt(id_vars="region",value_vars="Total Volume").sort_values(by="value",ascending=False).head()
Cela indique aux pandas de fusionner les données régionales dans un format plus long, en utilisant le volume total des ventes, puis de les trier par ordre décroissant, puis d'afficher les premières lignes.
Passer du format long au format large
Les tableaux croisés dynamiques sont une fonctionnalité populaire dans les tableurs comme Excel. Ils vous permettent de résumer les données dans toutes les catégories. Étant donné que les pandas peuvent importer des données de feuilles de calcul, ils peuvent également générer des tableaux croisés dynamiques.
Pour afficher une répartition régionale des ventes de sacs d'avocats de différentes tailles par région des États-Unis, vous devez utiliser cette commande :
Cela indique aux pandas de créer un tableau croisé dynamique, en utilisant la colonne « région » comme index, et les colonnes de sacs petits, grands et « extra grands » comme valeurs à résumer et de toutes les additionner.
Cela produira un tableau consolidé, même s'il contient de nombreux « NaN » ou des données manquantes.
Combiner des tableaux
Souvent, vous constaterez peut-être que vous avez des tables avec une structure similaire que vous souhaitez combiner en une seule. Heureusement, il est facile de faire cela chez les pandas en les concaténant, ce qui est un mot sophistiqué pour les assembler.
Prenons quelques données de ventes fictives représentant deux trimestres de ventes :
q1_data = {
'Date': ('2024-01-15', '2024-01-20', '2024-02-10', '2024-03-05'),
'Product': ('Laptop', 'Mouse', 'Keyboard', 'Monitor'),
'Region': ('North', 'South', 'East', 'West'),
'Sales': (1200, 25, 150, 450),
'Units': (2, 5, 3, 1)
}
df_q1 = pd.DataFrame(q1_data)
q2_data = {
'Date': ('2024-04-12', '2024-05-18', '2024-06-22'),
'Product': ('Laptop', 'Keyboard', 'Monitor'),
'Region': ('East', 'North', 'South'),
'Sales': (1500, 175, 500),
'Units': (3, 4, 2)
}
df_q2 = pd.DataFrame(q2_data)
Ce code définit deux dictionnaires qui constitueront les tables, qui seront ensuite transformées en DataFrames.
Pour combiner ces tables, vous pouvez simplement utiliser la méthode pd.concat :
sales_data = pd.concat((df_q1,df_q2),axis=0)
Cela créera un nouvel objet DataFrame des tables, combinées verticalement. La plupart du temps, ce sera ce que vous souhaitez.
Gérer les dates et les heures
Les séries chronologiques jouent un rôle important dans l'analyse des données, telles que les volumes de ventes ou les cours des actions. Vous pouvez créer et modifier facilement des objets de données. Pour convertir la colonne de date du DataFrame avocat en une série datetime :
avocado("Date") = pd.to_datetime(avocado("Date"))
Une fois l'objet datetime créé, vous pouvez modifier votre DataFrame. Vous pouvez ajouter une colonne mois :
avocado("month") = avocado("Date").dt.month
Avec une colonne définie sur un objet datetime, vous pouvez la définir sur un index d'un DataFrame à l'aide des méthodes démontrées précédemment.
Manipulation de données texte
Vous pouvez facilement manipuler des données texte avec des pandas. Vous pouvez utiliser des méthodes de chaîne pour modifier l'apparence du texte. Pour convertir la colonne « type », en distinguant les avocats réguliers des avocats biologiques, vous pouvez utiliser la méthode str.upper :
avocado("type").str.upper()
Cela imprimera tout en majuscules, vous savez donc que les avacodes biologiques sont vraiment « BIOLOGIQUES ». C'est peut-être moins utile en pratique, mais je voulais quand même m'amuser un peu avec ça.
Vous pouvez faire la même chose pour les minuscules
avocado("type").str.lower()
Vous pouvez utiliser la méthode split pour diviser un DataFrame sur un certain caractère. Par exemple, vous pouvez créer de nouvelles colonnes à l'aide de cette opération. Par exemple, avec une colonne avec une ville et un état, telle que « Anytown, CA », vous pouvez la diviser par le caractère virgule (,) :
df("location").str.split(",")
Avec les capacités des pandas, il n'est pas difficile de comprendre pourquoi il est devenu un tel favori dans la communauté d'analyse de données Python. Un article comme celui-ci ne peut qu’effleurer la surface de ce que vous pouvez faire avec les pandas.
