Как использовать Pandas для преобразования файла Excel во вложенный JSON? - PullRequest
0 голосов
/ 11 ноября 2019

Я начинающий программист, и я пытаюсь преобразовать файл Excel во вложенный JSON с помощью Pandas.

Я публикую свой код и ожидаемый вывод, которого я пока не могу достичь,Проблема в том, что столбцы Excel, которые я преобразую во вложенную информацию, на самом деле должны находиться под именем «адреса», и я не могу понять, как это сделать. Буду благодарен за любые советы.

Вот так выглядит файл excel:

enter image description here

import pandas as pd
import json

df = pd.read_excel("...", encoding = "utf-8-sig")
df.fillna('', inplace = True)

def get_nested_entry(key, grp):
    entry = {}
    entry['Forename'] = key[0]
    entry['Middle Name'] = key[1]
    entry['Surname'] = key[2]

    for field in ['Address - Country']:
        entry[field] = list(grp[field].unique())
    return entry

entries = []
for key, grp in df.groupby(['Forename', 'Middle Name', 'Surname']):
    entry = get_nested_entry(key, grp)
    entries.append(entry)

print(entries)
with open("excel_to_json_output.json", "w", encoding = "utf-8-sig") as f:
    json.dump(entries, f, indent = 4)    

Это ожидаемоерезультат

 [
        {
            "firstName": "Angela",
            "lastName": "L.",
            "middleName": "Johnson",
            "addresses": [
                {
                    "postcode": "32807",
                    "city": "Orlando",
                    "state": "FL",
                    "country": "United States of America"
                }
            ],

Что я получаю, это

[
    {
        "Forename": "Angela",
        "Middle Name": "L.",
        "Surname": "Johnson",
        "Address - Country": [
            "United States of America"
        ]
    },

1 Ответ

0 голосов
/ 11 ноября 2019

Попробуйте это

b = {'First_Name': ["Angela","Peter","John"],
 'Middle_Name': ["L","J","A"], 
 'Last_Name': ["Johnson","Roth","Williams"], 
 'City': ["chicago","seattle","st.loius"],
 'state': ["IL","WA","MO"],
 'zip': [60007,98105,63115], 
 'country': ["USA","USA","USA"]}

df = pd.DataFrame(b)

predict = df.iloc[:,:3].to_dict(orient='records')
postdict = df.iloc[:,3:].to_dict(orient='records')
entities=[]
for i in range(df.shape[0]):
    tm = predict[i]
    tm["addresses"] = [postdict[i]]
    entities.append(tm)

вывод

[{'First_Name': 'Angela',
  'Middle_Name': 'L',
  'Last_Name': 'Johnson',
  'addresses': [{'City': 'chicago',
    'state': 'IL',
    'zip': 60007,
    'country': 'USA'}]},
 {'First_Name': 'Peter',
  'Middle_Name': 'J',
  'Last_Name': 'Roth',
  'addresses': [{'City': 'seattle',
    'state': 'WA',
    'zip': 98105,
    'country': 'USA'}]},
 {'First_Name': 'John',
  'Middle_Name': 'A',
  'Last_Name': 'Williams',
  'addresses': [{'City': 'st.loius',
    'state': 'MO',
    'zip': 63115,
    'country': 'USA'}]}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...