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 :
!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 indiquesep=';'
- 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.
import pandas as pd
data = pd.read_csv("data/data1.csv", sep=';', skipinitialspace=True, quotechar="'",
parse_dates=[3])
data
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 |
type(data['date_in'].values[1])
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.
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
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.
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
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.
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)
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 |