Problème données manquantes lors de l'extraction de donnée d'un fichier csv
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.
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.
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte