【问题标题】:Improve performance of converting list of JSON string to Dataframe提高将 JSON 字符串列表转换为 Dataframe 的性能
【发布时间】:2021-08-12 16:17:09
【问题描述】:

对于输入,我有一本字典

{
"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”等列的 Dataframe。

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 秒

我想知道是否有办法进一步提高这段代码的性能

【问题讨论】:

    标签: python json pandas dataframe performance


    【解决方案1】:

    您可以使用快速的第三方库先解析 json(orjson、ujson),然后将它们作为 dicts 输入 pandas。一个使用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 数组(无尾随逗号等)

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2020-11-20
      • 2018-09-15
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 2019-10-06
      • 2020-05-23
      相关资源
      最近更新 更多