Как проанализировать многоиндексные значения и создать CSV-файл при анализе данных JSON в Python - PullRequest
1 голос
/ 31 мая 2019

У меня есть несколько статических ключевых столбцов EmployeeId, type и несколько столбцов, поступающих из первого цикла FOR.

В то время как во втором цикле FOR, если у меня есть определенный ключ, только значения должны добавляться к существующим столбцам фрейма данных, в противном случае столбцы, извлекаемые из первого цикла for, должны оставаться неизменными.

First For Loop Output:

"EmployeeId","type","KeyColumn","Start","End","Country","Target","CountryId","TargetId"
"Emp1","Metal","1212121212","2000-06-17","9999-12-31","","","",""

После второго цикла, у меня есть вывод ниже:

"EmployeeId","type","KeyColumn","Start","End","Country","Target","CountryId","TargetId"
"Emp1","Metal","1212121212","2000-06-17","9999-12-31","","AMAZON","1",""
"Emp1","Metal","1212121212","2000-06-17","9999-12-31","","FLIPKART","2",""

Согласно коду, если у меня есть доступный тег Employee, у меня есть более 2 записей, но у меня может быть несколько файлов json без тега Employee, тогда выходные данные должны оставаться такими же, как в первом выводе цикла.

Но я получаю 0 записей в соответствии с моим кодом. Пожалуйста, помогите мне, если мой способ кодирования неправильный.

Действительно, извините - Если способ задать вопрос не ясен, так как я новичок в python. Пожалуйста, найдите код в гиперссылке ниже

Пожалуйста, найдите ниже код

    for i in range(len(json_file['enty'])):
        temp = {}
        temp['EmployeeId'] = json_file['enty'][i]['id']
        temp['type'] = json_file['enty'][i]['type']
        for key in json_file['enty'][i]['data']['attributes'].keys():        
            try:
                temp[key] = json_file['enty'][i]['data']['attributes'][key]['values'][0]['value']
            except:
                temp[key] = None      

        for key in json_file['enty'][i]['data']['attributes'].keys(): 
            if(key == 'Employee'):
                for j in range(len(json_file['enty'][i]['data']['attributes']['Employee']['group'])):
                    for key in json_file['enty'][i]['data']['attributes']['Employee']['group'][j].keys():
                        try:
                            temp[key] = json_file['enty'][i]['data']['attributes']['Employee']['group'][j][key]['values'][0]['value']
                        except:
                            temp[key] = None

                    temp_df = pd.DataFrame([temp])
                    df = pd.concat([df, temp_df], sort=True)

    # Rearranging columns
    df = df[['EmployeeId', 'type'] + [col for col in df.columns if col not in ['EmployeeId', 'type']]]

    # Writing the dataset
    df[columns_list].to_csv("Test22.csv", index=False, quotechar='"', quoting=1)

Если тег сотрудника недоступен, я получаю 0 записей в качестве выходных данных, но я ожидаю 1 запись в соответствии с выходными данными первого цикла FOR. Если «тег сотрудника» доступен, то я ожидаю 2 записи вместе с моими статическими столбцами «EmployeeId», «type», «KeyColumn», «Start», «End», иначе, если тег недоступен, тогда все статические столбцы «EmployeeId», «тип», «KeyColumn», «начало», «конец» и оставшиеся столбцы в качестве пробелов

введите описание ссылки здесь

1 Ответ

1 голос
/ 31 мая 2019

Длинное решение с модификацией кода, добавление еще одного цикла, изменение индексов, а также изменение параметров range:

df = pd.DataFrame()

num = max([len(v) for k,v in json_file['data'][0]['data1'].items()])
for i in range(num):
    temp = {}
    temp['Empid'] = json_file['data'][0]['Empid']
    temp['Empname'] = json_file['data'][0]['Empname']
    for key in json_file['data'][0]['data1'].keys():
        if key not in temp:
            temp[key] = []
        try:
            for j in range(len(json_file['data'][0]['data1'][key])):
                temp[key].append(json_file['data'][0]['data1'][key][j]['relative']['id']) 
        except:
            temp[key] = None                    
    temp_df = pd.DataFrame([temp])
    df = pd.concat([df, temp_df],ignore_index=True)
for i in json_file['data'][0]['data1'].keys():
    df[i] = pd.Series([x for y in df[i].tolist() for x in y]).drop_duplicates()

А теперь:

print(df)

Является:

  Empid Empname    XXXX   YYYYY
0  1234     ABC  Naveen   Kumar
1  1234     ABC     NaN  Rajesh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...