繁体   English   中英

以特定格式将 Pandas 数据帧输出到 json

[英]Output pandas dataframe to json in a particular format

我的数据框是

fname  lname  city    state    code
Alice  Lee    Athens  Alabama  PXY
Nor    Xi     Mesa    Arizona  ABC

json的输出应该是

{

   "Employees":{

      "Alice Lee":{

         "code":"PXY",

         "Address":"Athens, Alabama"

      },

      "Nor Xi":{

         "code":"ABC",

         "Address":"Mesa, Arizona"

      }

   }

}

df.to_json()没有给 json 提供层次结构。 你能建议我错过什么吗? 有没有办法在 Pandas 中编写 json 时组合列并给它们一个“键名”?

谢谢你。

尝试:

names = df[["fname", "lname"]].apply(" ".join, axis=1)
addresses = df[["city", "state"]].apply(", ".join, axis=1)
codes = df["code"]

out = {"Employees": {}}
for n, a, c in zip(names, addresses, codes):
    out["Employees"][n] = {"code": c, "Address": a}

print(out)

印刷:

{
    "Employees": {
        "Alice Lee": {"code": "PXY", "Address": "Athens, Alabama"},
        "Nor Xi": {"code": "ABC", "Address": "Mesa, Arizona"},
    }
}

我们可以填充一个新的数据框,其中的列是"code""Address" ,索引是"full_name" ,其中后两个是从数据框的列中生成的字符串添加:

new_df = pd.DataFrame({"code": df["code"],
                       "Address": df["city"] + ", " + df["state"]})
new_df.index = df["fname"] + " " + df["lname"]

这使

>>> new_df
          code          Address
Alice Lee  PXY  Athens, Alabama
Nor Xi     ABC    Mesa, Arizona

我们现在可以使用orient="index"调用to_dict

>>> d = new_df.to_dict(orient="index")
>>> d

{"Alice Lee": {"code": "PXY", "Address": "Athens, Alabama"},
 "Nor Xi": {"code": "ABC", "Address": "Mesa, Arizona"}}

为了匹配您的输出,我们用字典包装d

>>> {"Employee": d}

{
   "Employee":{
      "Alice Lee":{
         "code":"PXY",
         "Address":"Athens, Alabama"
      },
      "Nor Xi":{
         "code":"ABC",
         "Address":"Mesa, Arizona"
      }
   }
}
json = json.loads(df.to_json(orient='records'))
employees = {}
employees['Employees'] = [{obj['fname']+' '+obj['lname']:{'code':obj['code'], 'Address':obj['city']+', '+obj['state']}} for obj in json]

这输出 -

{
'Employees': [
{
  'Alice Lee': {
    'code': 'PXY',
    'Address': 'Athens, Alabama'
  }
},
{
  'Nor Xi': {
    'code': 'ABC',
    'Address': 'Mesa, Arizona'
   }
  }
 ]
}

你可以使用 df.iterrows() 解决这个问题

employee_dict = {}
for row in df.iterrows():

    #  row[0] is the index number, row[1] is the data respective to that index
    row_data = row[1]
    employee_name = row_data.fname + ' ' + row_data.lname
    employee_dict[employee_name] = {'code': row_data.code, 'Address': 
                                     row_data.city + ', ' + row_data.state}

json_data = {'Employees': employee_dict}

结果:

{'Employees': {'Alice Lee': {'code': 'PXY', 'Address': 'Athens, Alabama'},
               'Nor Xi': {'code': 'ABC', 'Address': 'Mesa, Arizona'}}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM