Résolue

Problème données manquantes lors de l'extraction de donnée d'un fichier csv

# Dictionnaires # Fichiers # PyCharm

Bonjour,

J'ai fais un script pour créer un dictionnaire à partir d'un fichier csv.

le problème c'est qu'il manque plus de 300 lignes lorsque je le créer.

Voici mon script:


import csv
file_path = "base_de_donnees_suisse_des_valeurs_nutritives_2.csv"
def csv_to_dict(file_path):
    with open(file_path, 'r') as file:
        reader = csv.reader(file, delimiter=";")
        header = next(reader)
        data = {}
        for row in reader:
            inner_dict = {header[i]: row[i] for i in range(len(header))}
            data[row[0]] = inner_dict
    return data


Et voici le début de l'output lorsque je fais un print de la fonction:


Se) (µg)': 'n.i.'}, 'Endive, à la vapeur (sans adjonction de sel)': {'Nom': 'Endive, à la vapeur (sans adjonction de sel)', 'Catégorie': 'Légumes/Légumes cuits (conserves comprises)', 'kJ': '55', 'kcal': '13', 'Lipides, totaux (g)': '0.2', 'Acides gras, saturés (g)': '0', 'Acides gras, mono-insaturés (g)': '0', 'Acides gras, poly-insaturés (g)': '0.1', 'Cholestérol (mg)': '0', 'Glucides, disponibles (g)': '0.7', 'Sucres (g)': '0.6', 'Amidon (g)': '0.1', 'Fibres alimentaires (g)': '2.4', 'Protéines (g)': '1', 'Sel (NaCl) (g)': '0', 'Alcool (g)': '0', 'Eau (g)': '95.7', 'Activité de vitamine A, RE (µg-RE)': '1', 'Activité de vitamine A, RAE (µg-RE)': '0', 'Rétinol (µg)': '0', 'Activité de bétacarotène (µg-BCE)': '5', 'Bétacarotène (µg)': '5', 'Vitamine B1 (thiamine) (mg)': '0.04', 'Vitamine B2 (riboflavine) (mg)': '0.05', 'Vitamine B6 (pyridoxine) (mg)': '0.03', 'Vitamine B12 (cobalamine) (µg)': '0', 'Niacine (mg)': '0.25', 'Folate (µg)': '32.2', 'Acide pantothénique (mg)': '0.12', 'Vitamine C (acide ascorbique) (mg)': '1.1', 'Vitamine D (calciférol) (µg)': '0', 'Activité de vitamine E (mg-ATE)': '0.1', 'Potassium (K) (mg)': '180', 'Sodium (Na) (mg)': '3.5', 'Chlore (Cl) (mg)': '24', 'Calcium (Ca) (mg)': '20', 'Magnésium (Mg) (mg)': '9.3', 'Phosphore (P) (mg)': '24', 'Fer (Fe) (mg)': '0.2', 'Iode (I) (µg)': '1', 'Zinc (Zn)  (mg)': '0.2', 'Sélénium (Se) (µg)': 'n.i.'}, 'Endive, crue': {'Nom': 'Endive, crue', 'Catégorie': 'Légumes/Légumes frais', 'kJ': '56', 'kcal': '14', 'Lipides, totaux (g)': '0.2', 'Acides gras, saturés (g)': '0.1', 'Acides gras, mono-insaturés (g)': 'tr.', 'Acides gras, poly-insaturés (g)': '0.1', 'Cholestérol (mg)': '0', 'Glucides, disponibles (g)': '0.7', 'Sucres (g)': '0.6', 'Amidon (g)': '0.1', 'Fibres alimentaires (g)': '2.5', 'Protéines (g)': '1', 'Sel (NaCl) (g)': '0', 'Alcool (g)': '0', 'Eau (g)': '94.7', 'Activité de vitamine A, RE (µg-RE)': '1', 'Activité de vitamine A, RAE (µg-RE)': '0', 'Rétinol (µg)': '0', 'Activité de bétacarotène (µg-BCE)': '6', 'Bétacarotène (µg)': '6', 'Vitamine B1 (thiamine) (mg)': '0.05', 'Vitamine B2 (riboflavine) (mg)': '0.05', 'Vitamine B6 (pyridoxine) (mg)': '0.03', 'Vitamine B12 (cobalamine) (µg)': '0', 'Niacine (mg)': '0.3', 'Folate (µg)': '52', 'Acide pantothénique (mg)': '0.14', 'Vitamine C (acide ascorbique) (mg)': '2', 'Vitamine D (calciférol) (µg)': '0', 'Activité de vitamine E (mg-ATE)': '0.1', 'Potassium (K) (mg)': '210', 'Sodium (Na) (mg)': '4', 'Chlore (Cl) (mg)': '25', 'Calcium (Ca) (mg)': '20', 'Magnésium (Mg) (mg)': '10', 'Phosphore (P) (mg)': '25', 'Fer (Fe) (mg)': '0.2', 'Iode (I) (µg)': '1', 'Zinc (Zn)  (mg)': '0.2', 'Sélénium (Se) (µg)': 'n.i.'}




Il manque le début et je ne comprend pas pourquoi.

le fichier csv comporte 1093 lignes et il en manque plus de 300 (les première). J'ai lancer le script sous pycharm

Salut Raphael,


connais tu pandas ? Tu peux facilement lire un fichier cvs avec pandas et ensuite transformer ton dataframe en dictionnaire


import pandas as pd

df = pd.read_csv(filename, sep=";")

dico = df.to_dict()


le nom de tes colonnes est bien en première ligne de ton fichier csv ? Si ce n'est pas le cas tu peux mettre un skiprows= dans le pd.read_csv()


Si tu as toujours un problème tu peux m'envoyer ton fichier csv ou juste un extrait si c'est confidentiel.


Aussi es tu sûr que dans les lignes de ton csv, il n'y a pas un ";" qui fait juste partie de l'information et qui n'est pas un séparateur. ça peut créer des décalages.


Dis moi ce qu'il en est.

Merci pour ta réponse!

Ça fait pas mal de chose à regarder !

Je vais regarder ça quand j'aurai un peu de temps et je te tiens au courant du résultat.

J'ai réussi à faire ce que je voulais avec pandas et l'aide de chatgpt.

Apparement mon dictionnaire était trop long et lorsque je faisais un print du dictionnaire, le début du dictionnaire ne s'affichait pas.

J'ai utiliser la méthode .get() sur une clé qui n'était pas afficher lors du print et ça fonctionne.


Salut Raphael. Super .

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.