【问题标题】:How do I use Pandas to convert an Excel file to a nested JSON?如何使用 Pandas 将 Excel 文件转换为嵌套的 JSON?
【发布时间】:2020-03-07 01:22:18
【问题描述】:

我是一名新手程序员,我正在尝试使用 Pandas 将 excel 文件转换为嵌套的 JSON。

我正在发布我的代码和预期的输出,到目前为止我无法实现。问题是我转换为嵌套信息的 excel 列实际上应该属于“地址”名称,我不知道该怎么做。将不胜感激任何建议。

excel文件是这样的:

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"
        ]
    },

【问题讨论】:

  • 我相信 Excel 和代码之间的列名不同(“名字”和“姓氏”与“名字”和“姓氏”)。我不认为这不是问题。我会尽快运行你的代码。

标签: python json excel pandas nested


【解决方案1】:

试试这个

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'}]}]

【讨论】:

  • Rajith,效果很好。非常感谢,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 2020-07-01
  • 2020-08-22
  • 2020-03-21
  • 2019-06-09
  • 2017-06-10
  • 2022-01-11
  • 2014-06-27
相关资源
最近更新 更多