Bonjour,

je chercher à remplir des colonnes d'un dataframe avec les éléments de réponse d'un reverse geocodage une cellule json. Bref je récupère les champs qui m'intéressent du json pour les positionner dans le dataframe. étant donner que j'ai plusieurs champs à extraire je le fait à l'aide d'une boucle FOR, mais en fonction du fichier sources j'obtiens différentes exception? un coup : KeyError: 'housenumber' avec un autre fichier IndexError: list index out of range.

je ne comprend pas pourquoi il existe des erreurs différentes d'un fichier source à l'autres et à quoi correspondent ces erreur, pouvez vous m'aider ?

voici un exemple d'une ligne :
{'type': 'FeatureCollection',
'version': 'draft',
'features': [{'type': 'Feature',
'geometry': {'type': 'Point', 'coordinates': [-1.58203, 47.206115]},
'properties': {'label': '41 bis Rue de la Bourdonnais 44100 Nantes',
'score': 0.9999999987671132,
'housenumber': '41 bis',
'id': '44109_4737_00041_bis',
'type': 'housenumber',
'x': 353350.67,
'y': 6688485.23,
'importance': 0.6114075230200428,
'name': '41 bis Rue de la Bourdonnais',
'postcode': '44100',
'citycode': '44109',
'city': 'Nantes',
'context': '44, Loire-Atlantique, Pays de la Loire',
'street': 'Rue de la Bourdonnais',
'distance': 1}}],
'attribution': 'BAN',
'licence': 'ETALAB-2.0',
'limit': 1}
le code que j'utilise est celui-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
df = pd.read_excel(f'{path}/{file}{extension}')
 
for idx, row in df.iterrows():
    df.loc[idx,'adresse'] = json.loads(row['reponse'])['features'][0]['properties']['label']
    df.loc[idx,'housenumber'] = json.loads(row['reponse'])['features'][0]['properties']['housenumber']
    df.loc[idx,'street'] = json.loads(row['reponse'])['features'][0]['properties']['street']
et en fonction du fichier source j'ai plusieurs erreur possible :


---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-46-3de1e7042c05> in <module>
8 for idx, row in df.iterrows():
9 df.loc[idx,'adresse'] = json.loads(row['reponse'])['features'][0]['properties']['label']
---> 10 df.loc[idx,'housenumber'] = json.loads(row['reponse'])['features'][0]['properties']['housenumber']
11 df.loc[idx,'street'] = json.loads(row['reponse'])['features'][0]['properties']['street']
12 df.loc[idx,'postcode'] = json.loads(row['reponse'])['features'][0]['properties']['postcode']

KeyError: 'housenumber'
ou

---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-51-fee091838b27> in <module>
7
8 for idx, row in df.iterrows():
----> 9 df.loc[idx,'adresse'] = json.loads(row['reponse'])['features'][0]['properties']['label']
10 df.loc[idx,'housenumber'] = json.loads(row['reponse'])['features'][0]['properties']['housenumber']
11 df.loc[idx,'street'] = json.loads(row['reponse'])['features'][0]['properties']['street']

IndexError: list index out of range