Pandas offre la possibilité d'importer des données de nombreuses origines :

  • CSV
  • Excel
  • tables extraite de pages web
  • base de donnée SQL
  • format spécifique de fichier ou d'application (HDF, JSON, Parquet...)

Les deux derniers points ne sont pas présentés ici ainsi que d'autres qu'on retrouvera dans la liste de E/S.

Il existe aussi des bibliothèques tierces qui permettent de récupérer des données au format de Pandas.

En pratique il est rare qu'il faille faire un travail important pour intégrer des données dans un tableau de Pandas.

CSV¶

Il s'agit d'un format simple que l'humain peut lire. Il peut être généré par un logiciel de bureautique ou des programmes spécialisés. Certains paramêtres pouvant varier d'un fichier à un autre, Pandas offre la possibilité de les préciser en argument.

Regardons un fichier CSV :

In [1]:
!cat data/data1.csv  # a unix command (starts with !)
product; price; amount; date_in
  'pen';   0.2;  10000; 2016-03-23
 'ball';   2.1;   2300; 2016-05-12
'board';  1.75;  10000; 2016-05-03

Pour intégrer ce fichier dans un tableau nous allons spécifier les paramètre nécessaires :

  • ici le séparateur entre les champs est ; alors que la valeur par défaut est , aussi on indique sep=';'
  • certaines lignes commencent pas des espaces qu'il faut retirer, donc skipinitialspace=True
  • les quotes autour des mots doivent être retirées, on lui indique qu'il s'agit de simples quotes
  • on précise qu'il y a un colonne de date afin que Pandas les convertisse en date plutôt que de les lire comme des chaînes de caractères, parse_dates=[3]

La documentation de read_csv liste tous les paramètres.

In [2]:
import pandas as pd

data = pd.read_csv("data/data1.csv", sep=';', skipinitialspace=True, quotechar="'",
                   parse_dates=[3])
data
Out[2]:
product price amount date_in
0 pen 0.20 10000 2016-03-23
1 ball 2.10 2300 2016-05-12
2 board 1.75 10000 2016-05-03
In [3]:
type(data['date_in'].values[1])
Out[3]:
numpy.datetime64

Excel¶

Le format d'Excel, xls ou xlsx, est lu par Pandas. Voici la liste des musées francais stockée sur le site des données ouvertes de l'État data.gouv.fr.

In [4]:
url = "https://www.data.gouv.fr/s/resources/liste-et-localisation-des-musees-de-france/20160404-110647/Liste_musees_de_France.xls"
data = pd.read_excel(url)
data
Out[4]:
NOMREG NOMDEP DATEAPPELLATION FERME ANNREOUV ANNEXE NOM DU MUSEE ADR CP VILLE SITWEB FERMETURE ANNUELLE PERIODE OUVERTURE JOURS NOCTURNES
0 ALSACE BAS-RHIN 01/02/2003 NON NaN NaN Musée de la Folie Marco 30, Rue du Dr Sultzer 67140 BARR www.barr.fr Novembre à avril Ouvert de mai à septembre du mercredi au lundi... NaN
1 ALSACE BAS-RHIN 01/02/2003 NON NaN NaN Musée de la Poterie 2, rue de Kuhlendorf 67660 BETSCHDORF www.betschdorf.fr/tourisme/visiter_betschdrof/... Novembre à mi-avril Ouvert du mardi au samedi de 10h à 12h et de 1... NaN
2 ALSACE BAS-RHIN 01/02/2003 OUI 29 juin 2013 NaN Musée de Bouxwiller et du Pays de Hanau 2, Place du Château\nHalle aux Blés 67330 BOUXWILLER www.musee-pays-hanau.webmuseo.com NaN Fermé. Ouvert uniquement sur réservation pour ... NaN
3 ALSACE BAS-RHIN 01/02/2003 NON NaN NaN Musée Alsacien 1, place Joseph Thierry 67500 HAGUENAU www.ville-haguenau.fr/pages/culture/musee.htm 1er janvier, dimanche de Pâques, 1er mai, 1er ... Ouvert du lundi au vendredi de 9h à 12h et de ... NaN
4 ALSACE BAS-RHIN 01/02/2003 NON NaN NaN Musée Historique 9, Rue du Maréchal Foch\nB.P. 40261 67504 HAGUENAU Cedex www.ville-haguenau.fr/pages/culture/musee.htm ... 1er janvier, dimanche de Pâques, 1er mai, 1er ... Ouvert lundi de 14h à 18h, mercredi au vendred... NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1239 RHÔNE-ALPES SAVOIE 06/01/2002 NON NaN NaN Musée des Charmettes 890, Chemin des Charmettes 73000 CHAMBERY Site de la mairie Jours fériés Ouvert du mercredi au lundi de 10h à 12h et de... NaN
1240 RHÔNE-ALPES SAVOIE 06/01/2002 NON NaN NaN Musée Savoisien Square de Lannoy de Bissy 73000 CHAMBERY Site du conseil général ou www.musee-savoisien.fr Jours fériés Ouvert du mercredi au lundi de 10h à 12h et de... NaN
1241 RHÔNE-ALPES SAVOIE 01/02/2003 OUI Pas d'infos NaN Muséum d'histoire naturelle 208, Avenue de Lyon\nB.P. 844 73007 CHAMBERY CEDEX NaN Jours fériés Ouvert du mardi au vendredi, lematin sur rdv p... Nuit des musées
1242 RHÔNE-ALPES SAVOIE 01/02/2003 NON NaN NaN Musée de l'Académie de La Val d'Isère 23, Place Saint-Pierre 73600 MOÛTIERS Site de l'Académie - http://academie.sup.fr Fêtes Ouvert du lundi au samedi de 9h à 12h et de 14... NaN
1243 ST PIERRE ET MIQUELON SAINT-PIERRE ET MIQUELON 01/02/2003 NON NaN NaN Musée Municipal Rue du 11 novembre\nB.P. 4300 97500 SAINT-PIERRE ET MIQUELON www.arche-musee-et-archive.net NaN Ouvert samedi et dimanche de 10h à 12h et de 1... Nuit Blanche (octobre) jusqu'à minuit et de mi...

1244 rows × 14 columns

read_html¶

Avec de la chance (et parfois à l'aide bibliothèque BeautifullSoup), Pandas peut lire un tableau dans une page web.

Voici un exemple à partir d'une page de Boursorama.

In [13]:
url = "https://www.boursorama.com/bourse/actions/cotations/" # https://www.fdic.gov/resources/resolutions/bank-failures/failed-bank-list/banklist.html"
dfs = pd.read_html(url)    # returns a list of dataframes, one for each table in the web page
In [14]:
display(dfs[0].head(), dfs[0].tail())
Libellé Dernier Var. Ouv +Haut +Bas Var/1Janv Vol.
0 SRD AB SCIENCE 3.300 -1.35% 3.31 3.350 3.235 -7.17% 30121
1 SRD ABC ARBITRAGE 3.785 +2.71% 3.67 3.795 3.660 -21.23% 94185
2 SRD ACCOR 40.710 -0.78% 41.00 41.460 40.660 +17.66% 584335
3 SRD ACTIA GROUP 3.330 -3.76% 3.38 3.490 3.310 -16.33% 25899
4 SRD ADOCIA 10.220 +3.86% 10.20 11.200 9.870 -11.44% 315512
Libellé Dernier Var. Ouv +Haut +Bas Var/1Janv Vol.
20 SRD AUBAY 40.850 0.00% 40.900 41.100 40.700 -1.92% 2580
21 SRD AVENIR TELECOM 0.154 -0.13% 0.156 0.162 0.152 +34.38% 390822
22 SRD AXA 32.395 +0.29% 32.120 32.505 32.120 +9.85% 1697953
23 SRD AXWAY SOFTWARE 27.200 -1.09% 27.500 27.500 27.200 +3.03% 4366
24 SRD AYVENS (ex ALD) 5.475 -1.97% 5.550 5.555 5.440 -15.05% 273184

Pandas datareader¶

La bibliothèque pandas-datereader permet de récupérer facilement des données sur le web. Malheureusement certains sites sources changent trop souvent leur format ou ne sont pas toujours fiables ce qui pose des problèmes de maintenance à cette bibliothèque. Aussi Yahoo! Finance et Google Finance ont été abandonnés puis réintégrés. Il faut regarder la documentation ou tester avec l'autocomplétion pour savoir quelles bases sont accessibles.

Attention certaines bases demandent d'avoir une autorisation d'accès laquelle s'obtient sur leur site web.

In [19]:
from pandas_datareader import wb

matches = wb.search('gdp.*capita.*const')  # GDP per capita, constant dollars
wb.download(indicator='NY.GDP.PCAP.KD', country=['US', 'CN', 'FR'], start=2015, end=2023)
/tmp/ipykernel_3387/877596236.py:4: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead
  wb.download(indicator='NY.GDP.PCAP.KD', country=['US', 'CN', 'FR'], start=2015, end=2023)
Out[19]:
NY.GDP.PCAP.KD
country year
China 2022 11560.242122
2021 11223.255348
2020 10358.169997
2019 10155.510883
2018 9619.209475
2017 9053.228725
2016 8516.528742
2015 8016.445595
France 2022 38816.479280
2021 38002.194236
2020 35806.617892
2019 38832.024201
2018 38259.697770
2017 37694.083303
2016 36956.795800
2015 36652.922305
United States 2022 62789.127921
2021 61829.845627
2020 58451.606715
2019 60698.011299
2018 59607.393660
2017 58207.578310
2016 57292.538783
2015 56762.729452
In [ ]: