I have this JSON list in Python:
[{'id': 'TC2-FFA',
'shortCode': 'TC2-FFA',
'dataSet': {'datumPrecision': 2,
'id': 'TC2_37',
'shortCode': 'TC2_37',
'shortDescription': 'Clean Continent to US Atlantic coast',
'displayGroup': 'BCTI',
'datumUnit': 'Worldscale',
'data': [{'value': 156.11, 'date': '2023-03-06'}],
'apiIdentifier': 'RDSX9KRCHQI9TVGID5O7XQGBP1KKBZ0F'},
'datumUnit': 'WS',
'datumPrecision': 3,
'projectionStartOn': '2005-01-04T00:00:00',
'projectionEndOn': '2023-03-06T00:00:00',
'apiIdentifier': 'RPSBTGHKN64SV91SV9R3492RCH33D2OH'},
{'id': 'TC2$-FFA',
'shortCode': 'TC2$-FFA',
'dataSet': {'datumPrecision': 2,
'id': 'TC2_37',
'shortCode': 'TC2_37',
'shortDescription': 'Clean Continent to US Atlantic coast',
'displayGroup': 'BCTI',
'datumUnit': 'Worldscale',
'data': [{'value': 156.11, 'date': '2023-03-06'}],
'apiIdentifier': 'RDSX9KRCHQI9TVGID5O7XQGBP1KKBZ0F'},
'datumUnit': '$/mt',
'datumPrecision': 3,
'projectionStartOn': '2010-05-10T00:00:00',
'projectionEndOn': '2023-03-06T00:00:00',
'apiIdentifier': 'RPSH1H9454DYUE7G8CLHVLFPJZ3BVM77'}]
How could I use pandas.json_normalize
to only retrieve the data shortCode
(or id
) and data
under dataSet
(dataSet
—data
—value
and date
)?
This is the desired dataframe:
shortCode data.value data.date
0 TC2-FFA 156.11 2023-03-06
1 TC2$-FFA 156.11 2023-03-06
I tried
pd.json_normalize(lst_object, record_path=['dataSet', ['shortCode', ['data', 'value'], ['data', 'date']])
but it failed
2
Answers
It can be confusing.
You want all values from
dataSet.data
so they are your records.You can then use meta to bring in
shortCode
Fix your
record_path
and pass parameter values formeta_path
andrecord_prefix
Result