Глубокая вложенная нормализация JSON в Python pandas
Я хочу преобразовать файл JSON с глубокой вложенностью в CSV. Файл JSON
{"abcd-performance:output": {"performance": [{"sample": {"objectId": "abcd-device: 100: 12","ifName": "Carrier1/ 1", "timeStamp": "2021-10-20T03:15:00.000Z "," тип ":" радио "," недопустимый ": ложь," атрибут ": [{" параметр ":" rslReadingMean "," значение ": -36.4}, {" параметр ":" qam-32rx_time "," value ": 0}]}}, {" sample ": {" objectId ":" abcd-device: 100: 12 "," ifName ":" Carrier1/ 1 "," timeStamp ":" 2021-10-20T03:30:00.000Z "," type ":" radio "," invalid": false," attribute": [{" параметр ":" rslReadingMean "," value ": -36,5 },{"параметр": "qam-32rx_time", "значение": 0}]}}, {"образец": {"objectId": "abcd-device: 100: 13","ifName": "Терминал", " timeStamp ":" 2021-10-20T03:30:00.000Z "," type ":" sensor "," invalid": false," attribute": [{" параметр ":" InputCurrent "," значение ": 1.14} , {"параметр": "Температура", "значение": 61.5}, {"параметр": "Входное напряжение", "значение": 54.777}]}}]}}"тип": "датчик", "недопустимый": ложь, "атрибут": [{"параметр": "Входной ток", "значение": 1.14}, {"параметр": "Температура", "значение": 61,5} , {"параметр": "Входное напряжение", "значение": 54.777}]}}]}}"тип": "датчик", "недопустимый": ложь, "атрибут": [{"параметр": "Входной ток", "значение": 1.14}, {"параметр": "Температура", "значение": 61,5} , {"параметр": "Входное напряжение", "значение": 54.777}]}}]}}
код
with open('Performance_Interface_data.json') as f:
data = json.load(f)
df = pd.json_normalize(data['abcd-performance:output'], 'performance', max_level=4)
print(df.columns)
print(df)
Обязательные выходные данные: sample_objectId; sample_ifName; sample_timeStamp; sample_type; sample_invalid; sample_attribute_parameter; sample_attribute_value.
Я не могу выполнить нормализацию последнего столбца.
1 ответ
Вам нужно будет указать аргументы для
meta
а также
record_path
согласно JSON.
df = pd.json_normalize(data['abcd-performance:output']['performance'], record_path=['sample','attribute'], meta=[['sample', 'objectId'], ['sample', 'ifName'], ['sample', 'timeStamp'], ['sample', 'type'], ['sample', 'invalid']])
In [50]: df
Out[50]:
parameter value sample.objectId sample.ifName sample.timeStamp sample.type sample.invalid
0 rslReadingMean -36.400 abcd-device:100:12 Carrier1/1 2021-10-20T03:15:00.000Z radio False
1 qam-32rx_time 0.000 abcd-device:100:12 Carrier1/1 2021-10-20T03:15:00.000Z radio False
2 rslReadingMean -36.500 abcd-device:100:12 Carrier1/1 2021-10-20T03:30:00.000Z radio False
3 qam-32rx_time 0.000 abcd-device:100:12 Carrier1/1 2021-10-20T03:30:00.000Z radio False
4 InputCurrent 1.140 abcd-device:100:13 Terminal 2021-10-20T03:30:00.000Z sensor False
5 Temperature 61.500 abcd-device:100:13 Terminal 2021-10-20T03:30:00.000Z sensor False
6 InputVoltage 54.777 abcd-device:100:13 Terminal 2021-10-20T03:30:00.000Z sensor False