introduction
Le package Pythonpandas
est utilisé pour la manipulation et l'analyse des données, conçu pour vous permettre de travailler avec des données étiquetées ou relationnelles de manière plus intuitive.
Construit sur le packagenumpy
,pandas
comprend des étiquettes, des indices descriptifs et est particulièrement robuste dans la gestion des formats de données courants et des données manquantes.
Le packagepandas
offre une fonctionnalité de feuille de calcul mais travailler avec des données est beaucoup plus rapide avec Python qu'avec une feuille de calcul, etpandas
s'avère très efficace.
Dans ce didacticiel, nous allons d'abord installerpandas
, puis vous orienter vers les structures de données fondamentales:Series etDataFrames.
Installation depandas
Comme avec les autres packages Python, nous pouvons installerpandas
avecpip
.
Tout d'abord, passons à noslocal programming environment ouserver-based programming environment de votre choix et installonspandas
avec ses dépendances là-bas:
pip install pandas numpy python-dateutil pytz
Vous devriez recevoir une sortie semblable à celle-ci:
OutputSuccessfully installed pandas-0.19.2
Si vous préférez installerpandas
dansAnaconda, vous pouvez le faire avec la commande suivante:
conda install pandas
À ce stade, vous êtes prêt à commencer à travailler avec le packagepandas
.
Séries
Danspandas
, lesSeries sont des tableaux unidimensionnels qui peuvent contenir n'importe queldata type. Les étiquettes des axes sont désignées collectivement sous le nom deindex.
Lançons l’interpréteur Python dans votre ligne de commande comme suit:
python
Depuis l'interpréteur, importez les packagesnumpy
etpandas
dans votre espace de noms:
import numpy as np
import pandas as pd
Avant de travailler avec Series, examinons ce à quoi il ressemble généralement:
s = pd.Series([data], index=[index])
Vous remarquerez peut-être que les données sont structurées comme un Pythonlist.
Sans déclarer un index
Nous allons saisir des données entières, puis fournir un paramètre de nom pour la série, mais nous éviterons d'utiliser le paramètreindex
pour voir commentpandas
le remplit implicitement:
s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')
Maintenant, appelons la série pour voir ce quepandas
en fait:
s
Nous verrons la sortie suivante, avec l’index dans la colonne de gauche, nos valeurs de données dans la colonne de droite. Sous les colonnes se trouvent des informations sur le nom de la série et le type de données constituant les valeurs.
Output0 0
1 1
2 4
3 9
4 16
5 25
Name: Squares, dtype: int64
Bien que nous n'ayons pas fourni d'index pour le tableau, il y en a eu un ajouté implicitement des valeurs entières0
à5
.
Déclarer un index
Comme le montre la syntaxe ci-dessus, nous pouvons également créer une série avec un index explicite. Nous utiliserons des données sur la profondeur moyenne en mètres des océans de la Terre:
avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic', 'Atlantic', 'Indian', 'Pacific', 'Southern'])
Maintenant que la série est construite, appelons-la pour voir le résultat:
avg_ocean_depth
OutputArctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64
Nous pouvons voir que l'index que nous avons fourni est à gauche avec les valeurs à droite.
Série d'indexation et de tranchage
Avecpandas
Series, nous pouvons indexer par le nombre correspondant pour récupérer les valeurs:
avg_ocean_depth[2]
Output3741
Nous pouvons également découper par numéro d'index pour récupérer des valeurs:
avg_ocean_depth[2:4]
OutputIndian 3741
Pacific 4080
dtype: int64
De plus, nous pouvons appeler la valeur de l'index pour renvoyer la valeur à laquelle elle correspond:
avg_ocean_depth['Indian']
Output3741
Nous pouvons également trancher avec les valeurs de l'index pour renvoyer les valeurs correspondantes:
avg_ocean_depth['Indian':'Southern']
OutputIndian 3741
Pacific 4080
Southern 3270
dtype: int64
Notez que dans ce dernier exemple, lors de la découpe avec des noms d'index, les deux paramètres sont inclusifs et non exclusifs.
Quittons l'interpréteur Python avecquit()
.
Série initialisée avec dictionnaires
Avecpandas
, nous pouvons également utiliser le type de donnéesdictionary pour initialiser une série. De cette façon, nous ne déclarerons pas un index en tant que liste séparée mais utiliserons les clés intégrées en tant qu'index.
Créons un fichier appeléocean.py
et ajoutons le dictionnaire suivant avec un appel pour l’imprimer.
ocean.py
import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
print(avg_ocean_depth)
Maintenant, nous pouvons exécuter le fichier sur la ligne de commande:
python ocean.py
Nous recevrons le résultat suivant:
OutputArctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64
La série est affichée de manière organisée, avec l'index (composé de nos clés) à gauche et l'ensemble de valeurs à droite.
Cela se comportera comme les autres dictionnaires Python en ce sens que vous pouvez accéder aux valeurs en appelant la clé, ce que nous pouvons faire comme suit:
ocean_depth.py
...
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output3741
Atlantic 3646
Indian 3741
dtype: int64
Cependant, ces séries étant désormais des objets Python, vous ne pourrez plus utiliser les fonctions de dictionnaire.
Les dictionnaires Python fournissent une autre forme pour configurer Series enpandas
.
DataFrames
LesDataFrames sont des structures de données étiquetées à 2 dimensions qui ont des colonnes qui peuvent être constituées de différents types de données.
Les DataFrames sont similaires aux tableurs ou aux tables SQL. En général, lorsque vous travaillez avecpandas
, les DataFrames seront l’objet le plus courant que vous utiliserez.
Pour comprendre le fonctionnement du DataFramepandas
, configurons deux séries, puis transmettons-les dans un DataFrame. La première série sera notre sérieavg_ocean_depth
d'avant, et la seconde seramax_ocean_depth
qui contient les données de la profondeur maximale de chaque océan sur Terre en mètres.
ocean.py
import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series({
'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
})
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})
Une fois ces deux séries configurées, ajoutons le DataFrame au bas du fichier, sous la sériemax_ocean_depth
. Dans notre exemple, ces deux séries ont les mêmes étiquettes d'index, mais si vous aviez des séries avec des étiquettes différentes, les valeurs manquantes seraient étiquetéesNaN
.
Ceci est construit de telle sorte que nous puissions inclure des étiquettes de colonne, que nous déclarons comme clés des variables de la série. Pour voir à quoi ressemble le DataFrame, appelons-le pour l’imprimer.
ocean.py
...
max_ocean_depth = pd.Series({
'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
})
ocean_depths = pd.DataFrame({
'Avg. Depth (m)': avg_ocean_depth,
'Max. Depth (m)': max_ocean_depth
})
print(ocean_depths)
Output Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803
Southern 3270 7075
La sortie montre nos deux en-têtes de colonne avec les données numériques sous chacun, et les étiquettes des clés du dictionnaire se trouvent à gauche.
Tri des données dans les cadres de données
Nous pouvonssort the data in the DataFrame en utilisant la fonctionDataFrame.sort_values(by=...)
.
Par exemple, utilisons le paramètre booléenascending
, qui peut êtreTrue
ouFalse
. Notez queascending
est un paramètre que nous pouvons passer à la fonction, mais que la descente ne l'est pas.
ocean_depth.py
...
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Southern 3270 7075
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803
À présent, la sortie affiche les nombres allant de valeurs basses aux valeurs élevées dans la colonne entière la plus à gauche.
Analyse statistique avec DataFrames
Ensuite, regardonssome summary statistics que nous pouvons collecter à partir depandas
avec la fonctionDataFrame.describe()
.
Sans passer de paramètres particuliers, la fonctionDataFrame.describe()
fournira les informations suivantes pour les types de données numériques:
Revenir | Ce que cela veut dire |
---|---|
|
Compte de fréquence; le nombre de fois où quelque chose se produit |
|
La moyenne ou la moyenne |
|
L'écart type, une valeur numérique utilisée pour indiquer dans quelle mesure les données varient |
|
Le nombre minimum ou le plus petit de l'ensemble |
|
25e centile |
|
50e centile |
|
75e centile |
|
Le nombre maximum ou le plus grand de l'ensemble |
Laissez Python imprimer ces données statistiques pour nous en appelant notreocean_depths
DataFrame avec la fonctiondescribe()
:
ocean.py
...
print(ocean_depths.describe())
Lorsque nous exécuterons ce programme, nous recevrons le résultat suivant:
Output Avg. Depth (m) Max. Depth (m)
count 5.000000 5.000000
mean 3188.400000 7967.400000
std 1145.671113 1928.188347
min 1205.000000 5567.000000
25% 3270.000000 7075.000000
50% 3646.000000 7906.000000
75% 3741.000000 8486.000000
max 4080.000000 10803.000000
Vous pouvez maintenant comparer la sortie ici au DataFrame d’origine et avoir une meilleure idée des profondeurs moyennes et maximales des océans de la Terre, en tant que groupe.
Gestion des valeurs manquantes
Souvent, lorsque vous travaillez avec des données, vous aurez des valeurs manquantes. Le packagepandas
fournit de nombreuses façons différentes pourworking with missing data, qui se réfère aux donnéesnull
, ou des données qui ne sont pas présentes pour une raison quelconque. Danspandas
, ceci est appelé données NA et est rendu commeNaN
.
Nous allons parcourirdropping missing values avec la fonctionDataFrame.dropna()
etfilling missing values avec la fonctionDataFrame.fillna()
. Cela garantira que vous ne rencontrez pas de problèmes dès le début.
Créons un nouveau fichier appeléuser_data.py
et remplissons-le avec des données qui ont des valeurs manquantes et transformons-le en DataFrame:
user_data.py
import numpy as np
import pandas as pd
user_data = {'first_name': ['Sammy', 'Jesse', np.nan, 'Jamie'],
'last_name': ['Shark', 'Octopus', np.nan, 'Mantis shrimp'],
'online': [True, np.nan, False, True],
'followers': [987, 432, 321, np.nan]}
df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])
print(df)
Notre appel à imprimer nous montre la sortie suivante lorsque nous exécutons le programme:
Output first_name last_name online followers
0 Sammy Shark True 987.0
1 Jesse Octopus NaN 432.0
2 NaN NaN False 321.0
3 Jamie Mantis shrimp True NaN
Il y a pas mal de valeurs manquantes ici.
Commençons par supprimer les valeurs manquantes avecdropna()
.
user_data.py
...
df_drop_missing = df.dropna()
print(df_drop_missing)
Puisqu'il n'y a qu'une seule ligne pour laquelle il ne manque aucune valeur dans notre petit jeu de données, c'est la seule ligne qui reste intacte lorsque nous exécutons le programme:
Output first_name last_name online followers
0 Sammy Shark True 987.0
Au lieu de supprimer les valeurs, nous pouvons à la place remplir les valeurs manquantes avec une valeur de notre choix, telle que0
. Nous y parviendrons avecDataFrame.fillna(0)
.
Supprimez ou commentez les deux dernières lignes que nous avons ajoutées à notre fichier et ajoutez ce qui suit:
user_data.py
...
df_fill = df.fillna(0)
print(df_fill)
Lorsque nous exécutons le programme, nous recevons le résultat suivant:
Output first_name last_name online followers
0 Sammy Shark True 987.0
1 Jesse Octopus 0 432.0
2 0 0 False 321.0
3 Jamie Mantis shrimp True 0.0
Maintenant, toutes nos colonnes et lignes sont intactes, et au lieu d'avoirNaN
comme valeurs, nous avons maintenant0
qui remplissent ces espaces. Vous remarquerez que les flotteurs sont utilisés lorsque cela convient.
À ce stade, vous pouvez trier les données, effectuer une analyse statistique et gérer les valeurs manquantes dans les DataFrames.
Conclusion
Ce didacticiel a couvert des informations introductives pour l'analyse de données avecpandas
et Python 3. Vous devriez maintenant avoir installépandas
et pouvez travailler avec les structures de données Series et DataFrames danspandas
.