#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 (без конечных запятых и т. Д.)