как получить все многозначные атрибуты в CSV-файл - PullRequest
1 голос
/ 30 мая 2019

У меня есть пример данных, как показано ниже. Атрибуты ниже принадлежат словарю [data].В "XXXX" у меня есть значение "Naveen", а в "YYYYY" у меня есть "Kumar" и "Rajesh".я пытаюсь с помощью приведенного ниже кода, чтобы получить 2 записанных вывода

Пожалуйста, помогите с любым предложением

    {
  "data": [
  {
      "Empid": "1234",
      "Empname": "ABC",
       "data1": {
          "XXXX": [
            {
              "relative": {
                "id": "Naveen"
              }
            }
          ],
          "YYYYY": [
            {
              "relative": {
                "id": "Kumar"
              }
            },
            {
              "relative": {
                "id": "Rajesh"
              }
            }
          ]
          }

     }
     ]
}

Пожалуйста, найдите ниже код (я пытаюсь)

df = pd.DataFrame()
for i in range(len(json_file['data'])):
    temp = {}
    temp['Empid'] = json_file['data'][i]['Empid']
    temp['EmpName'] = json_file['data'][i]['EmpName']
        for key in json_file['data'][i]['data1'].keys():
                try:
                    for j in range(len(json_file['data'][i]['data1'][key])):
                        temp[key]  = json_file['data'][i]['data1'][key][j]['relative']['id'] 
                except:
                    temp[key] = None                    
        temp_df = pd.DataFrame([temp])
        df = pd.concat([df, temp_df], sort=True)

Окончательный результат я пытаюсь достичь

 EmpID EmpName XXXX   YYYYY 
 1234  ABC     Naveen  Kumar
 1234  ABC     Nan     Rajesh

, но получаю только 1 запись

 EmpID EmpName XXXX   YYYYY 
 1234  ABC     Naveen  Kumar

Пожалуйста, помогите мне с любым предложением

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

если вы json такой:

json_file = {
  "data": [
     {
          "XXXX": [
            {
              "relative": {
                "id": "Naveen"
              }
            }
          ],
          "YYYYY": [
            {
              "relative": {
                "id": "Kumar"
              }
            },
            {
              "relative": {
                "id": "Rajesh"
              }
            }
          ]
    }
     ]
}

Приведенный ниже код помещает результат в матрицу temp:

temp = []
for key in json_file['data'][0].keys():
    for i in json_file['data'][0][key]:
        temp.append([key,i['relative']['id']])

Результат:

[['XXXX', 'Naveen'], ['YYYYY', 'Kumar'], ['YYYYY', 'Rajesh']]
0 голосов
/ 30 мая 2019

Другой ответ с DataFrame:

df = pd.DataFrame()
for key in json_file['data'][0].keys():
    for j in range(len(json_file['data'][0][key])):
        df.loc[j,key] = json_file['data'][0][key][j]['relative']['id']

Результат:


XXXX    YYYYY
0   Naveen  Kumar
1   NaN Rajesh
0 голосов
/ 30 мая 2019
from pandas.io.json import json_normalize
key=list(json_file1['data'][0].keys())
df=pd.concat([json_normalize(json_file1['data'][0][key[0]]),json_normalize(json_file1['data'][0][key[1]])],axis=1)
df=df.ffill()
df.columns=key
df


   XXXX    YYYYY
0   Naveen  Kumar
1   Naveen  Rajesh

Для его автоматизации вы можете перебирать различные ключи

DF={}
key=list(json_file1['data'][0].keys())
for i in range(len(key)):
    df=json_normalize(json_file1['data'][0][key[i]])
    DF[key[i]]=(pd.concat([df],axis=0))
DF1=pd.concat(DF,axis=1)
DF1=DF1.ffill()
DF1.columns=key
DF1

выход

   XXXX   YYYYY    ZZZZZ
0   Naveen  Kumar   Kumar1
1   Naveen  Rajesh  Rajesh1
...