Повышение производительности преобразования списка строк JSON в фрейм данных

#python #json #pandas #dataframe #performance

Вопрос:

Для ввода у меня есть словарь

 {
"TAX:10672": "[
    {"entity_id":10672,"profile_id":20321,"metric_type_name":"CAPEX","metric":null,"perform_metric":null},
    {"entity_id":10672,"profile_id":32583,"metric_type_name":"CAPEX","metric":null,"perform_metric":null},
    {"entity_id":10672,"profile_id":8526,"metric_type_name":"CAPEX","metric":null,"perform_metric":null}
]",    
"TAX:10869": "[
    {"entity_id":10869,"profile_id":20430,"metric_type_name":"OPEX","metric":null,"perform_metric":null,},
    {"entity_id":10869,"profile_id":32692,"metric_type_name":"CAPEX","metric":null,"perform_metric":null},
    {"entity_id":10869,"profile_id":8631,"metric_type_name":"Revenue","metric":null,"perform_metric":null}
]"
 

}

В приведенном ниже коде я взял значения словаря, преобразовал их в список JSON, а затем в фрейм данных со столбцами «entity_id», «profile_id», «metric_type_name» и т. Д.

 input_dict = /*Sample values given above*/
temp = list()
{temp.append(pd.read_json(v)) for v in list(input_dict.values())}
output_df = pd.concat(temp)
 

Однако производительность очень низкая, для каталога с 5000 записями это занимает около 100-120 секунд

Я хочу знать, есть ли способ еще больше повысить производительность этого кода

Ответ №1:

Вы можете использовать быстрые сторонние библиотеки для первого анализа json (orjson, ujson), а затем передавать их в панды в виде диктантов. Пример использования orjson:

 import orjson
from itertools import chain

parsed = map(orjson.loads, input_dict.values())
output_df = pd.DataFrame(chain.from_iterable(parsed))
 

Обратите внимание, что ваши значения input_dict должны быть допустимым массивом json (без конечных запятых и т. Д.)