Skip to main content
 首页 » 编程设计

python之我想从我的 Pandas 数据框创建一个多嵌套的 json

2025年05月04日13zhengyun_ustc

我有一个以下格式的 Pandas 数据框:-

    EMPCODE|Indicator|CustNAME 
    1        CASA       Raja 
    1        CASA       lala 
    1        CASA       dada 
    1        TL         Nan 
    1        l          Nan 
    1        p          Nan 
    1        q          Nan 
    2        CASA       Crick 
    2        CASA       Flick 
    2        TL         Nan 
    2        l          Nan 
    2        p          Nan 
    2        q          Nan         

我想将其转换为嵌套的 json 。

我尝试了各种不同的方法,包括 groupby()、apply(),但我无法获得所需 json 格式的输出。从下面提到的代码中,我得到了两个员工的重复 custNAme 值。

  group = merge_hr_anr.groupby('EMPCODE_y').groups 
  group1 = merge_hr_anr.groupby("EMPNAME").groups 
    for variable in range(a): 
            d = {'EMPCODE_y': list(group.keys())[variable],'EMPNAME':  
            list(group1.keys())[variable] ,'Indicators': [{'IndicatorName':  
            merge_hr_anr.loc[i, 'IndicatorName']} for i in list(group.values())  
            [variable].unique()]} 
            d['Indicators'] = list(map(dict,sorted(set(map(lambda x:  
            tuple(x.items()),d['Indicators'])), key=list(map(lambda x:  
            tuple(x.items()),d['Indicators'])).index))) 
            d['Performance'] = [{i['IndicatorName']:  
(merge_hr_anr.loc[merge_hr_anr['IndicatorName'].eq(i['IndicatorName']),"CUSTNAME"]).dropna().tolist()} for i in d['Indicators']]     
 
    My output is 
{ 
    "EMPCODE": "1", 
    "Indicators": [ 
      { 
        "IndicatorName": "CASA" 
      }, 
      { 
        "IndicatorName": "TL" 
      }, 
      { 
        "IndicatorName": "l" 
      }, 
      { 
        "IndicatorName": "p" 
      }, 
      { 
        "IndicatorName": "q" 
      } 
    ] 
  "Performance":[ 
     { 
         "CASA":[{"Custname":"Raja"},{"Custname":"lala"},{"Custname":"dada"}] 
     }, 
     { 
         "TL":[] 
     } 
     { 
         "l":[] 
     } 
     { 
         "p":[] 
     } 
     { 
         "q":[] 
     } 
 
  ] 
} 
{ 
    "EMPCODE": "2", 
    "Indicators": [ 
      { 
        "IndicatorName": "CASA" 
      }, 
      { 
        "IndicatorName": "TL" 
      }, 
      { 
        "IndicatorName": "l" 
      }, 
      { 
        "IndicatorName": "p" 
      }, 
      { 
        "IndicatorName": "q" 
      } 
    ] 
  "Performance":[ 
     { 
         "CASA":[{"Custname":"Raja"},{"Custname":"lala"},{"CustName":"dada"}] 
     }, 
     { 
         "TL":[] 
     } 
     { 
         "l":[] 
     } 
     { 
         "p":[] 
     } 
     { 
         "q":[] 
     } 
 
  ] 
} 

我希望输出是

{ 
    "EMPCODE": "1", 
    "Indicators": [ 
      { 
        "IndicatorName": "CASA" 
      }, 
      { 
        "IndicatorName": "TL" 
      }, 
      { 
        "IndicatorName": "l" 
      }, 
      { 
        "IndicatorName": "p" 
      }, 
      { 
        "IndicatorName": "q" 
      } 
    ] 
  "Performance":[ 
     { 
         "CASA":[{"Custname":"Raja"},{"Custname":"lala"},{"Custname":"dada"}] 
     }, 
     { 
         "TL":[] 
     } 
     { 
         "l":[] 
     } 
     { 
         "p":[] 
     } 
     { 
         "q":[] 
     } 
 
  ] 
} 
{ 
    "EMPCODE": "2", 
    "Indicators": [ 
      { 
        "IndicatorName": "CASA" 
      }, 
      { 
        "IndicatorName": "TL" 
      }, 
      { 
        "IndicatorName": "l" 
      }, 
      { 
        "IndicatorName": "p" 
      }, 
      { 
        "IndicatorName": "q" 
      } 
    ] 
  "Performance":[ 
     { 
         "CASA":[{"Custname":"Crick"},{"Custname":"Flick"}] 
     }, 
     { 
         "TL":[] 
     } 
     { 
         "l":[] 
     } 
     { 
         "p":[] 
     } 
     { 
         "q":[] 
     } 
 
  ] 
} 

请您参考如下方法:

尝试使用下面的代码构造一个 dictionary:

group = merge_hr_anr.groupby('EMPCODE').groups 
d = {'EMPCODE': list(group.keys())[0], 'Indicators': [{'IndicatorName': merge_hr_anr.loc[i, 'Indicator']} for i in list(group.values())[0].unique()]} 
d['Indicators'] = list(map(dict,sorted(set(map(lambda x: tuple(x.items()),d['Indicators'])), key=list(map(lambda x: tuple(x.items()),d['Indicators'])).index))) 
d['Performance'] = [{i['IndicatorName']: merge_hr_anr.loc[merge_hr_anr['Indicator'].eq(i['IndicatorName']), 'CustNAME'].dropna().tolist()} for i in d['Indicators']] 
print(d) 

输出:

{'EMPCODE': 1, 'Indicators': [{'IndicatorName': 'CASA'}, {'IndicatorName': 'TL'}, {'IndicatorName': 'l'}, {'IndicatorName': 'p'}, {'IndicatorName': 'q'}], 'Performance': [{'CASA': ['Raja', 'lala', 'dada']}, {'TL': []}, {'l': []}, {'p': []}, {'q': []}]} 

编写.json文件:

with open('outvalue7.json', 'w') as f: 
    f.write(str(d))