Problème list index out of range error
Résolu
Antioche75
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
Antioche75 Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
Antioche75 Messages postés 15 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à obtenir une liste de marques et de modèles de bateaux clean à partir d'un premier dataset saisi à la main avec des erreurs, le deuxième provenant d'une base de données maritime, avec un module de levensthein (fuzzywuzzy), seulement j'obtiens un message d'erreur relatif à un problème d'index que je ne comprends pas
Les deux datasets :
https://www.transfernow.net/en/dltransfer?utm_source=202203070QxpVjYJ
Mon code :
Le message d'erreur :
Je ne comprends pas par ce que
Je cherche à obtenir une liste de marques et de modèles de bateaux clean à partir d'un premier dataset saisi à la main avec des erreurs, le deuxième provenant d'une base de données maritime, avec un module de levensthein (fuzzywuzzy), seulement j'obtiens un message d'erreur relatif à un problème d'index que je ne comprends pas
Les deux datasets :
https://www.transfernow.net/en/dltransfer?utm_source=202203070QxpVjYJ
Mon code :
#%% from fuzzywuzzy import process import pandas as pd #%% BASE_LAMBDA_PATH = '../ressources/marques_modeles_lambda_entier.csv' BASE_REF_PATH = '../ressources/marques_modeles_ref_entier.csv' #%% lambda_df = pd.read_csv(BASE_LAMBDA_PATH, sep=";") #%% ref_df = pd.read_csv(BASE_REF_PATH, sep=";") #%% j'ai créé ma liste de résultat (initée à vide) df_result = pd.DataFrame(columns=['marque', 'lambda','ref','score']) #%% je parcours ma table de modèles lambda for ind in lambda_df.index: marque = lambda_df['MARQUE_REF'][ind] modele_lambda = lambda_df['MODELE'][ind] ref_list = (ref_df[(ref_df['lib_marque'] == marque)]['lib_model']).to_list() choices = process.extract(modele_lambda, ref_list, limit=1) approx = choices[0][0] score = choices[0][1] df2 = pd.DataFrame(data = [(marque, modele_lambda, approx, score)],\ columns=['marque', 'lambda','ref','score']) df_result = pd.concat([df_result, df2], axis=0, ignore_index=True) df_result.to_csv('output_matching_groupe.csv', sep=';', index=False) ''' tdep = time.time() tfin = time.time() print(f"duree de {tfin-tdep} secondes") ''' # %%
Le message d'erreur :
IndexError Traceback (most recent call last)
c:\Users\boats\src\list_matching_groupe.py in <cell line: 1>()
20 ref_list = (ref_df[(ref_df['lib_marque'] == marque)]['lib_model']).to_list()
21 choices = process.extract(modele_lambda, ref_list, limit=1)
----> 22 approx = choices[0][0]
23 score = choices[0][1]
24 df2 = pd.DataFrame(data = [(marque, modele_lambda, approx, score)],\
25 columns=['marque', 'lambda','ref','score'])
IndexError: list index out of range
Je ne comprends pas par ce que
choices[0][0] fonctionne puisque j'obtiens:
'Guy Couach 1401'
A voir également:
- Indexerror list index out of range
- Out of range écran ✓ - Forum Matériel & Système
- Intitle index of ✓ - Forum Téléchargement
- Input signal out of range - Forum Matériel & Système
- Problème signal out of range - Forum Windows
- Input signal out of range. (Problème Difficile) ✓ - Forum Matériel & Système
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
quand tu utilises les balises de code, peux-tu préciser le langage? https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
je suggères que tu ajoutes un print() avant la ligne qui te donne une erreur:
je pense que cela t'aidera à comprendre ce que fait ton code.
je suggères que tu ajoutes un print() avant la ligne qui te donne une erreur:
print(type(choices),choices)
je pense que cela t'aidera à comprendre ce que fait ton code.
Désolé pour les balises de code, il s'agit de Python,
Je viens de faire comme suggéré:
Je viens de faire comme suggéré:
#%% j'ai créé ma liste de résultat (initée à vide) df_result = pd.DataFrame(columns=['marque', 'lambda','ref','score']) #%% je parcours ma table de modèles lambda for ind in lambda_df.index: marque = lambda_df['MARQUE_REF'][ind] modele_lambda = lambda_df['MODELE'][ind] ref_list = (ref_df[(ref_df['lib_marque'] == marque)]['lib_model']).to_list() print(type(choices),choices) choices = process.extract(modele_lambda, ref_list, limit=1) approx = choices[0][0] score = choices[0][1] df2 = pd.DataFrame(data = [(marque, modele_lambda, approx, score)],\ columns=['marque', 'lambda','ref','score']) df_result = pd.concat([df_result, df2], axis=0, ignore_index=True) df_result.to_csv('output_matching_groupe.csv', sep=';', index=False) ''' tdep = time.time() tfin = time.time() print(f"duree de {tfin-tdep} secondes") ''' # %%
<class 'list'> [('Guy Couach 1401', 90)] <class 'list'> [('Guy Couach 1401', 90)] <class 'list'> [('Bluewater 2460', 100)] <class 'list'> [('Windy 46 Chinook', 90)] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) Input In [55], in <module> 9 print(type(choices),choices) 10 choices = process.extract(modele_lambda, ref_list, limit=1) ---> 11 approx = choices[0][0] 12 score = choices[0][1] 13 df2 = pd.DataFrame(data = [(marque, modele_lambda, approx, score)],\ 14 columns=['marque', 'lambda','ref','score']) IndexError: list index out of range
Je n'ai malheureusement pas l'impression que cela change grand chose, ou du moins je ne comprends pas ce
<class 'list'> []
#%% j'ai créé ma liste de résultat (initée à vide) df_result = pd.DataFrame(columns=['marque', 'lambda','ref','score']) #%% je parcours ma table de modèles lambda for ind in lambda_df.index: marque = lambda_df['MARQUE_REF'][ind] modele_lambda = lambda_df['MODELE'][ind] ref_list = (ref_df[(ref_df['lib_marque'] == marque)]['lib_model']).to_list() choices = process.extract(modele_lambda, ref_list, limit=1) print(type(choices),choices) approx = choices[0][0] score = choices[0][1] df2 = pd.DataFrame(data = [(marque, modele_lambda, approx, score)],\ columns=['marque', 'lambda','ref','score']) df_result = pd.concat([df_result, df2], axis=0, ignore_index=True) df_result.to_csv('output_matching_groupe.csv', sep=';', index=False) ''' tdep = time.time() tfin = time.time() print(f"duree de {tfin-tdep} secondes") ''' # %%
<class 'list'> [('Guy Couach 1401', 90)] <class 'list'> [('Bluewater 2460', 100)] <class 'list'> [('Windy 46 Chinook', 90)] <class 'list'> [] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) Input In [58], in <module> 9 choices = process.extract(modele_lambda, ref_list, limit=1) 10 print(type(choices),choices) ---> 11 approx = choices[0][0] 12 score = choices[0][1] 13 df2 = pd.DataFrame(data = [(marque, modele_lambda, approx, score)],\ 14 columns=['marque', 'lambda','ref','score']) IndexError: list index out of range
Je crois avoir compris, c'est dû aux lignes vides ou partiellement vides dans le dataset (présence uniquement d'une marque ou d'un modèle:
Comment puis je efface les lignes vides / partiellement vides pour pallier à cela?
MARQUE_REF MODELE
Guy Couach 1401
Karnic BLUEWATER 2460
Windy 46 CHINOOK
Absolute NAVETTA 52
SLOOP
Clear AQUARIUS OPEN
Comment puis je efface les lignes vides / partiellement vides pour pallier à cela?