Skip to content

Panda#

Tous les exemples de ce cours pour la partie pandas ont été pris du cours de python de Patrick Fuchs et Pierre Poulain !! https://python.sdv.univ-paris-diderot.fr/17_modules_interet_bioinfo/#174-module-pandas

Series#

Une Serie correspond à un vecteur à une dimension

Syntaxe

>>> import pandas as pd
>>> s = pd.Series([10, 20, 30, 40], index = ['a', 'b', 'c', 'd'])
>>> s
a    10
b    20
c    30
d    40
dtype: int64

Chaque élément de la série de données possède une étiquette qui permet d'appeler les éléments :

>>> s[0]
10
>>> s["a"]
10

on peut extraire plusieurs éléments, par leurs indices ou leurs étiquettes :

>>> s[[1, 3]]
b    20
d    40
dtype: int64
>>> s[["b", "d"]]
b    20
d    40
dtype: int64

Les étiquettes permettent de modifier et d'ajouter des éléments :

>>> s["c"] = 300
>>> s["z"] = 50
>>> s
a     10
b     20
c    300
d     40
z     50
dtype: int64

on peut filtrer une partie de la series :

>>> s[s>30]
c    300
d     40
z     50
dtype: int64

et même combiner plusieurs critères de sélection :

>>> s[(s>20) & (s<100)]
d    40
z    50
dtype: int64

Dataframe#

Une Dataframe correspondent à un tableaux à deux dimensions avec des étiquettes pour nommer les lignes et les colonnes.

Création#

Voici comment créer un dataframe avec pandas à partir de données fournies comme liste de lignes :

>>> df = pd.DataFrame(columns=["a", "b", "c", "d"],
...                   index=["chat", "singe", "souris"],
...                   data=[np.arange(10, 14),
...                         np.arange(20, 24),
...                         np.arange(30, 34)])
>>> df
         a   b   c   d
chat    10  11  12  13
singe   20  21  22  23
souris  30  31  32  33

Le même dataframe peut aussi être créé à partir des valeurs fournies en colonnes sous la forme d'un dictionnaire :

>>> data = {"a": np.arange(10, 40, 10),
...         "b": np.arange(11, 40, 10),
...         "c": np.arange(12, 40, 10),
...         "d": np.arange(13, 40, 10)}
>>> df = pd.DataFrame(data)
>>> df.index = ["chat", "singe", "souris"]
>>> df
         a   b   c   d
chat    10  11  12  13
singe   20  21  22  23
souris  30  31  32  33

Création à partir d'un csv#

Une fonctionnalité très intéressante de pandas est d'ouvrir très facilement un fichier au format .csv :

>>> import pandas as pd
>>> df = pd.read_csv("mon_fichier.csv")

>>> df = pd.read_csv("mon_fichier.csv", index_col="ID")
>>> df.head()
>>> df.shape

# quel est le type de c/colonne
>>> df.dtypes 

Pratique 11 : importer un fichier csv et le explorer#

Jupyter notebook

Créer un programme python exo-pandas-explo.py qui prenne en input le fichier suivant:

https://python.sdv.univ-paris-diderot.fr/data-files/transferrin_report.csv

Lire le fichier avec pd.read_csv et calculer quelques statistiques descriptives pour les données numériques avec la méthode .describe().

La colonne "Source" contient des chaînes de caractères, on peut rapidement déterminer le nombre de protéines pour chaque organisme

Dataframe Proprietés#

Les dimensions d'un dataframe sont données par l'attribut .shape :

>>> df.shape l'attribut
(3, 4)

La méthode .head(n) renvoie les n premières lignes du dataframe (par défaut, n vaut 5) :

>>> df.head(2)

L'attribut .columns renvoie le nom des colonnes et permet aussi de renommer les colonnes

>>> df.columns
Index(['a', 'b', 'c', 'd'], dtype='object')
>>> df.columns = ["Paris", "Lyon", "Nantes", "Pau"]
>>> df
        Paris  Lyon  Nantes  Pau
chat       10    11      12   13
singe      20    21      22   23
souris     30    31      32   33

Dataframe Sélection#

Sélection de colonnes#

On peut sélectionner une colonne par son étiquette :

>>> df["Lyon"]
chat      11
singe     21
souris    31

ou plusieurs colonnes en même temps :

>>> df[["Lyon", "Pau"]]
        Lyon  Pau
chat      11   13
singe     21   23
souris    31   33

Sélection de lignes#

Pour sélectionner une ligne, il faut utiliser l'instruction .loc() et l'étiquette de la ligne :

>>> df.loc["singe"]
Paris     20
Lyon      21
Nantes    22
Pau       23
Name: singe, dtype: int64

Ici aussi, on peut sélectionner plusieurs lignes :

>>> df.loc[["singe", "chat"]]
       Paris  Lyon  Nantes  Pau
singe     20    21      22   23
chat      10    11      12   13

Enfin, on peut aussi sélectionner des lignes avec l'instruction .iloc et l'indice de la ligne (la première ligne ayant l'indice 0) :

>>> df.iloc[1]
Paris     20
Lyon      21
Nantes    22
Pau       23
Name: singe, dtype: int64

>>> df.iloc[[1,0]]
       Paris  Lyon  Nantes  Pau
singe     20    21      22   23
chat      10    11      12   13

On peut également utiliser les tranches (comme pour les listes) :

>>> df.iloc[0:2]
       Paris  Lyon  Nantes  Pau
chat      10    11      12   13
singe     20    21      22   23

Sélection de lignes ET colonnes#

On peut combiner les deux types de sélection (en ligne et en colonne):

>>> df.loc["souris", "Pau"]
33
>>> df.loc[["singe", "souris"], ['Nantes', 'Lyon']]
        Nantes  Lyon
singe       22    21
souris      32    31

Sélection par condition#

Sélectionnons maintenant toutes les lignes pour lesquelles les effectifs à Pau sont > à 15

>>> df[ df["Pau"]>15 ]

De cette sélection, on ne souhaite garder que les valeurs pour Lyon :

>>> df[ df["Pau"]>15 ]["Lyon"]

On peut aussi combiner plusieurs conditions avec & pour l'opérateur et :

>>> df[ (df["Pau"]>15) & (df["Lyon"]>25) ]

et | pour l'opérateur ou :

>>> df[ (df["Pau"]>15) | (df["Lyon"]>25) ]

Pratique 12 : Statistiques par groupe#

Créer un programme python exo-pandas-stats.py qui prenne en input le fichier transferrin_report.csv et qui calcule la taille et la masse moléculaire moyennes des transferrines.

  • explorer les fonctions .groupby() et .mean() pour le faire

  • Calculer la valeur minimale et maximale de la longueur et de la masse moléculaire explore les fonctions .pivot_table()

Combinaison de dataframes#

Combinaison de dataframes

df1

         Lyon  Paris
chat      10      3
singe     23     15
souris    17     20

df2

          Nantes  Strasbourg
chat         3           5
souris       9          10
lapin       14           8

pour concatener les deux df

>>>pd.concat([df1, df2])

pour les concatener mais en mettant en commun les lignes des deux df

>>> pd.concat([df1, df2], axis=1)

conserver que les lignes communes aux deux dataframes

>>> pd.concat([df1, df2], axis=1, join="inner")

Pratique 13 : Concatener#

Créer un programme python exo-pandas-concatener.py qui cree les deux df :

df1

         Lyon  Paris
chat      10      3
singe     23     15
souris    17     20

df2

          Nantes  Strasbourg
chat         3           5
souris       9          10
lapin       14           8

et qui les concatene !