Manipulation des tableaux de données avec la bibliothèque Pandas

Manipulation des tableaux de données avec la bibliothèque Pandas

Création d’un Dataset

A partir de tableaux Numpy

import pandas as pd
import numpy as np  

np.random.seed(42)
data = np.random.randint(0,50,(4,12)) # création d'un array (4,12), valeurs entières aléatoires entre 0 et 50  
print(data)
[[38 28 14 42  7 20 38 18 22 10 10 23]
 [35 39 23  2 21  1 23 43 29 37  1 20]
 [32 11 21 43 24 48 26 41 27 15 14 46]
 [43  2 36  6 20  8 38 17  3 24 13 49]]
nb_fruits_df = pd.DataFrame(data=data)
print(type(nb_fruits_df))
print(nb_fruits_df)
<class 'pandas.core.frame.DataFrame'>
    0   1   2
0  38  28  14
1  42   7  20
2  38  18  22
3  10  10  23
fruits = ['pommes','poires','fraises', 'bananes']
col = ['janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'aout', 'septembre', 'octobre', 'novembre', 'decembre']
nb_fruits_df = pd.DataFrame(data=data, index=fruits, columns=col)
nb_fruits_df

pandas_1.svg

janvier fevrier mars avril mai juin juillet aout septembre octobre novembre decembre
pommes 38 28 14 42 7 20 38 18 22 10 10 23
poires 35 39 23 2 21 1 23 43 29 37 1 20
fraises 32 11 21 43 24 48 26 41 27 15 14 46
bananes 43 2 36 6 20 8 38 17 3 24 13 49
nb_fruits_df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 4 entries, pommes to bananes
Data columns (total 12 columns):
 #   Column     Non-Null Count  Dtype
---  ------     --------------  -----
 0   janvier    4 non-null      int64
 1   fevrier    4 non-null      int64
 2   mars       4 non-null      int64
 3   avril      4 non-null      int64
 4   mai        4 non-null      int64
 5   juin       4 non-null      int64
 6   juillet    4 non-null      int64
 7   aout       4 non-null      int64
 8   septembre  4 non-null      int64
 9   octobre    4 non-null      int64
 10  novembre   4 non-null      int64
 11  decembre   4 non-null      int64
dtypes: int64(12)
memory usage: 416.0+ bytes

A partir d’un dictionnaire

data_d = {}
fruits = ['pommes','poires','fraises', 'bananes']
for fruits,fruits_data in zip(fruits,data) :
  data_d[fruits] = fruits_data
data_d
{'pommes': array([38, 28, 14, 42,  7, 20, 38, 18, 22, 10, 10, 23]),
 'poires': array([35, 39, 23,  2, 21,  1, 23, 43, 29, 37,  1, 20]),
 'fraises': array([32, 11, 21, 43, 24, 48, 26, 41, 27, 15, 14, 46]),
 'bananes': array([43,  2, 36,  6, 20,  8, 38, 17,  3, 24, 13, 49])}
nb_fruits_df = pd.DataFrame.from_dict(data_d,orient='index')
nb_fruits_df

0 1 2 3 4 5 6 7 8 9 10 11
pommes 38 28 14 42 7 20 38 18 22 10 10 23
poires 35 39 23 2 21 1 23 43 29 37 1 20
fraises 32 11 21 43 24 48 26 41 27 15 14 46
bananes 43 2 36 6 20 8 38 17 3 24 13 49
nb_fruits_df = pd.DataFrame.from_dict(data_d,orient='index',columns=col)
nb_fruits_df

janvier fevrier mars avril mai juin juillet aout septembre octobre novembre decembre
pommes 38 28 14 42 7 20 38 18 22 10 10 23
poires 35 39 23 2 21 1 23 43 29 37 1 20
fraises 32 11 21 43 24 48 26 41 27 15 14 46
bananes 43 2 36 6 20 8 38 17 3 24 13 49

A partir d’un fichier CSV

nb_fruits.csv

nb_fruits_df2 = pd.read_csv('nb_fruits.csv')
nb_fruits_df2

Unnamed: 0 janvier fevrier mars avril mai juin juillet aout septembre octobre novembre decembre
0 kiwis 38 28 14 42 7 20 38 18 22 10 10 23
1 cerises 35 39 23 2 21 1 23 43 29 37 1 20
2 ananas 32 11 21 43 24 48 26 41 27 15 14 46
3 abricots 43 2 36 6 20 8 38 17 3 24 13 49

Opérations sur les Datasets

Sélection de Colonnes

# Sélection d'une seule colonne  

nb_fruits_df['juillet']
pommes     38
poires     23
fraises    26
bananes    38
Name: juillet, dtype: int64
# Sélection de plusieurs colonnes

nb_fruits_df[['juillet', 'aout']] # on passe la liste de toutes les colonnes à sélectionner  

juillet aout
pommes 38 18
poires 23 43
fraises 26 41
bananes 38 17

Sélection de Lignes

# iloc : index ( numérique ) des lignes   
rows = nb_fruits_df.iloc[[0,1]] # lignes 0 et 1
rows

janvier fevrier mars avril mai juin juillet aout septembre octobre novembre decembre
pommes 38 28 14 42 7 20 38 18 22 10 10 23
poires 35 39 23 2 21 1 23 43 29 37 1 20
# loc : étiquettes des lignes  

rows = nb_fruits_df.loc[['fraises','pommes']] # lignes 0 et 1
rows

janvier fevrier mars avril mai juin juillet aout septembre octobre novembre decembre
fraises 32 11 21 43 24 48 26 41 27 15 14 46
pommes 38 28 14 42 7 20 38 18 22 10 10 23

Sélection de Lignes et de Colonnes

ss_ens = nb_fruits_df.iloc[ :,[2,3]] # toutes les lignes des colonnes 2 et 3
ss_ens

mars avril
pommes 14 42
poires 23 2
fraises 21 43
bananes 36 6
ss_ens = nb_fruits_df.iloc[[0,3],[2,3]] # lignes 0 et 3 des colonnes 2 et 3
ss_ens

mars avril
pommes 14 42
bananes 36 6
ss_ens = nb_fruits_df.loc[['pommes', 'poires'],['novembre', 'fevrier']]
ss_ens

novembre fevrier
pommes 10 28
poires 1 39