.. _tablesavecguillemetsrst: ====================== Tables avec guillemets ====================== .. only:: html **Links:** :download:`notebook `, :downloadlink:`html `, :download:`PDF `, :download:`python `, :downloadlink:`slides `, :githublink:`GitHub|_doc/notebooks/exemples/tables_avec_guillemets.ipynb|*` Le fichier de données à gérer contient quelques désagrément avec des guillements qui gênent la lecture lorsqu’on applique les exemples donnés par la documentation de `pandas `__. Voici l’exemple : .. code:: ipython3 texte = """ "Libellé","Produit","Prix","Quantite" "L123","meuble","1000","1" "L321","portable","500","2" "L333","lampe","100","4" """ with open("exemple_fichier.txt", "w", encoding="utf8") as f: f.write(texte) Le paramètre *encoding* de la fonction `open `__ est utilisé pour préciser que le texte contient des caractères non `ASCII `__, typiquement des accents. Mais pandas gère plutôt bien ce bruit. .. code:: ipython3 import pandas df = pandas.read_csv("exemple_fichier.txt", encoding="utf8") df .. raw:: html
Libellé Produit Prix Quantite
0 L123 meuble 1000 1
1 L321 portable 500 2
2 L333 lampe 100 4
On vérifie que les variables numériques sont numériques : .. code:: ipython3 df.dtypes .. parsed-literal:: Libellé object Produit object Prix int64 Quantite int64 dtype: object On peut décider de conserver les guillements en spécifiant le paramètre *quoting* : .. code:: ipython3 df2 = pandas.read_csv("exemple_fichier.txt", encoding="utf8" ,quoting=3) df2 .. raw:: html
"Libellé" "Produit" "Prix" "Quantite"
0 "L123" "meuble" "1000" "1"
1 "L321" "portable" "500" "2"
2 "L333" "lampe" "100" "4"
.. code:: ipython3 df2.dtypes .. parsed-literal:: "Libellé" object "Produit" object "Prix" object "Quantite" object dtype: object Et si jamais les virgules sont des points-virgules, il faut préciser le paramètre *sep* : .. code:: ipython3 texte = """ "Libellé";"Produit";"Prix";"Quantite" "L123";"meuble";"1000";"1" "L321";"portable";"500";"2" "L333";"lampe";"100";"4" """ with open("exemple_fichier2.txt", "w", encoding="utf8") as f: f.write(texte) df3 = pandas.read_csv("exemple_fichier2.txt", encoding="utf8", sep=";") df3 .. raw:: html
Libellé Produit Prix Quantite
0 L123 meuble 1000 1
1 L321 portable 500 2
2 L333 lampe 100 4
Et si jamais le fichier initial est très grand… On veut simplement lire les premières lignes : .. code:: ipython3 df4 = pandas.read_csv("exemple_fichier2.txt", encoding="utf8", sep=";", nrows=2) df4 .. raw:: html
Libellé Produit Prix Quantite
0 L123 meuble 1000 1
1 L321 portable 500 2
Ou encore une lecture par morceau de 2 lignes : .. code:: ipython3 reader = pandas.read_csv("exemple_fichier2.txt", encoding="utf8", sep=";", iterator=True, chunksize=2) for i, extrait in enumerate(reader): print("extrait",i) print(extrait) .. parsed-literal:: extrait 0 Libellé Produit Prix Quantite 0 L123 meuble 1000 1 1 L321 portable 500 2 extrait 1 Libellé Produit Prix Quantite 0 L333 lampe 100 4