如何在json文件中迭代间隔并创建数据帧?

2024-06-28 19:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在迭代json文件,并使用所需的列创建dataframe。我已经实现了代码,但是现在json文件有了一些变化。但我无法思考在哪里更改代码以获得所需的输出

说明:

以前的json结果:

queryResult: {'results': [{'data': [{'interval': '2021-10-11T11:46:25.000Z/2021-10-18T11:49:48.000Z',
                        'metrics': [{'metric': 'nOffered',
                                     'qualifier': None,
                                     'stats': {'count': 7,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}},
                                    {'metric': 'nTransferred',
                                     'qualifier': None,
                                     'stats': {'count': 1,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}}],
                        'views': None}],
              'group': {'mediaType': 'voice',
                        'queueId': '73643cff-799b-41ae-9a67-efcf5e593155'}}]}

上一个数据帧:

Queue_Id,Interval Start,Interval End,nOffered_count,nOffered_sum,nOffered.denominator,nOffered.numerator,nTransferred_count,nTransferred_sum,nTransferred.denominator,nTransferred.numerator
73643cff-799b-41ae-9a67-efcf5e593155,2021-10-11T11:46:25.000Z,2021-10-18T11:49:48.000Z,7,,,,1.0,,,

新的json结果:

queryResult: {'results': [{'data': [{'interval': '2021-10-11T11:46:25.000Z/2021-10-12T11:46:25.000Z',
                        'metrics': [{'metric': 'nOffered',
                                     'qualifier': None,
                                     'stats': {'count': 1,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}}],
                        'views': None},
                       {'interval': '2021-10-13T11:46:25.000Z/2021-10-14T11:46:25.000Z',
                        'metrics': [{'metric': 'nOffered',
                                     'qualifier': None,
                                     'stats': {'count': 2,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}},
                                    {'metric': 'nTransferred',
                                     'qualifier': None,
                                     'stats': {'count': 1,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}}],
                        'views': None},
                       {'interval': '2021-10-14T11:46:25.000Z/2021-10-15T11:46:25.000Z',
                        'metrics': [{'metric': 'nOffered',
                                     'qualifier': None,
                                     'stats': {'count': 3,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}}],
                        'views': None},
                       {'interval': '2021-10-15T11:46:25.000Z/2021-10-16T11:46:25.000Z',
                        'metrics': [{'metric': 'nOffered',
                                     'qualifier': None,
                                     'stats': {'count': 1,
                                               'count_negative': None,
                                               'count_positive': None,
                                               'current': None,
                                               'denominator': None,
                                               'max': None,
                                               'min': None,
                                               'numerator': None,
                                               'ratio': None,
                                               'sum': None,
                                               'target': None}}],
                        'views': None}],
              'group': {'mediaType': 'voice',
                        'queueId': '73643cff-799b-41ae-9a67-efcf5e593155'}}]}

现在需要数据帧:

Queue_Id,Interval Start,Interval End,nOffered_count,nOffered_sum,nOffered.denominator,nOffered.numerator,nTransferred_count,nTransferred_sum,nTransferred.denominator,nTransferred.numerator
73643cff-799b-41ae-9a67-efcf5e593155,2021-10-11T11:46:25.000Z,2021-10-12T11:46:25.000Z,1,,,,,,,
73643cff-799b-41ae-9a67-efcf5e593155,2021-10-13T11:46:25.000Z,2021-10-14T11:46:25.000Z,2,,,,1,,,
73643cff-799b-41ae-9a67-efcf5e593155,2021-10-14T11:46:25.000Z,2021-10-15T11:46:25.000Z,3,,,,,,,
73643cff-799b-41ae-9a67-efcf5e593155,2021-10-15T11:46:25.000Z,2021-10-16T11:46:25.000Z,1,,,,,,,

为了得到新的结果,我需要对下面的代码做哪些更改

column_names = []
        
if(query_result.results != None):
    for item in query_result.results:
        data_lst = []
        for lst_data in item.data:
            print("####################################")
            print(lst_data)
            print("####################################")
            for met in lst_data.metrics:
                metric_name = met.metric
                column_names.append('Queue_Id')
                column_names.append(metric_name+'_count')
                column_names.append(metric_name+'_sum')
                column_names.append(metric_name+'.denominator')
                column_names.append(metric_name+'.numerator')
                column_names.append('Interval Start')
                column_names.append('Interval End')
                data_lst.append(queue_id)
                data_lst.append(met.stats.count)
                data_lst.append(met.stats.sum)
                data_lst.append(met.stats.denominator)
                data_lst.append(met.stats.numerator)
                data_lst.append(lst_data.interval.split('/')[0])
                data_lst.append(lst_data.interval.split('/')[1])
                print(data_lst)
            
else:
    data_lst = []
    metric_name = query.metrics[0]
    column_names.append('Queue_Id')
    column_names.append(metric_name+'_count')
    column_names.append(metric_name+'_sum')
    column_names.append(metric_name+'.denominator')
    column_names.append(metric_name+'.numerator')
    column_names.append('Interval Start')
    column_names.append('Interval End')
    data_lst.append(queue_id)
    data_lst.append('')
    data_lst.append('')
    data_lst.append('')
    data_lst.append('')
    data_lst.append(query.interval.split('/')[0])
    data_lst.append(query.interval.split('/')[1])

print("data_lst", data_lst)
print("column_names", column_names)
return data_lst, column_names

Tags: namenonedatanamesstatscountcolumnmetric
2条回答

我已经修改了我的代码并得到了结果。以下代码适用于我-

        lst_of_metrics = ["nOffered", "nTransferred"]
        out = defaultdict(list)
        
        if(query_result.results != None):
            for item in query_result.results:
                #data_lst = []
                for lst_data in item.data:
                    print("####################################")
                    print(lst_data)
                    print("####################################")
                    
                    out['queue_id'].append(queue_id)
                    for met1, met in itertools.zip_longest(query.metrics, lst_data.metrics):
                        
                        #for met in lst_data.metrics:
                        if(met):
                            if(met.metric == met1):
                                out[met.metric+"_count"].append(met.stats.count)
                                out[met.metric+"_sum"].append(met.stats.sum)
                                out[met.metric+".denominator"].append(met.stats.denominator)
                                out[met.metric+".numerator"].append(met.stats.numerator)
                            else:
                                out[met1+"_count"].append('')
                                out[met1+"_sum"].append('')
                                out[met1+".denominator"].append('')
                                out[met1+".numerator"].append('')
                        else:
                            out[met1+"_count"].append('')
                            out[met1+"_sum"].append('')
                            out[met1+".denominator"].append('')
                            out[met1+".numerator"].append('')
                        
                    interval = lst_data.interval.split('/')
                    out['Interval Start'].append(interval[0])
                    out['Interval End'].append(interval[1])
                    print("out", out)
        else:
            metric_name = query.metrics[0]
            out['queue_id'].append(queue_id)
            out[metric_name+"_count"].append('')
            out[metric_name+"_sum"].append('')
            out[metric_name+".denominator"].append('')
            out[metric_name+".numerator"].append('')
            interval = query.interval.split('/')
            out['Interval Start'].append(interval[0])
            out['Interval End'].append(interval[1])

        print(out)
        df = pd.DataFrame(out)
        print (df)
        

相关问题 更多 >