使用 pandas 将 json 文件的部分内容转换为 csv

Convert portions of json file to csv with pandas

我有一个 JSON 文件,我需要从中将特定数组转换为 CSV,然后还包括数组外部的值。这是我的示例 JSON:

{
    "activities" : [
        {
          "act_id" : "123456",
          "act_employee_logged" : {
            "emp_id" : "123",
            "emp_code" : "ABC123",
            "emp_name" : "First Last Name",
          },
          "act_type" : "ActivityType",
          "act_external_attendees" : [
            {
              "contact_id" : "Guest789",
              "contact_name" : "First Last Name",
              "contact_email" : "last.first@example.com",
              "contact_phone" : "2105555555"
            },
            {
              "contact_id" : "Guest790",
              "contact_name" : "First Last Name 1",
              "contact_email" : "last.first1@example.com",
              "contact_phone" : "2105555556"
            }
          ],
          "act_internal_attendees" : [
            {
              "att_id" : "123",
              "att_code" : "ABC123",
              "att_name" : "First Last Name",
              "att_email" : "last.first@example.com"
            },
            {
              "att_id" : "124",
              "att_code" : "ABC124",
              "att_name" : "First Last Name 1",
              "att_email" : "last.first1@example.com"
            }
          ]
        }
    ]
}

我需要将 act_external_attendees 转换为数据框,然后再转换为 CSV。我已经成功做到了,下面是读取文件和创建数据框的代码部分:

import json
import csv
import pandas as pd

    with open("/filepath/interaction_response.json") as f:      #####  
            d = json.load(f)
    
    ext_att = pd.json_normalize(data=d['activities'], record_path='act_external_attendees', meta=['contact_id', 'contact_name', 'contact_email', 'contact_phone'],errors='ignore',record_prefix = '_') 

让我头疼的部分是我需要将 act_id 值作为列包含在我的数据框和 CSV 的每一行中,到目前为止我还没有找到一种方法来完成那。任何建议表示赞赏。

这可能有帮助

正在加载库

import json
import csv
import pandas as pd

正在读取文件

with open("/filepath/interaction_response.json") as f:
    d = json.load(f)

正在创建辅助结构

my_list = []
for sublist in myj['activities']:
    act_id = sublist['act_id']
    for val in sublist['act_external_attendees']:
        val.update({'act_id': act_id})
        my_list.append(val)

结果会是

print(my_list)
[{'contact_id': 'Guest789', 'contact_name': 'First Last Name', 'contact_email': 'last.first@example.com', 'contact_phone': '2105555555', 'act_id': '123456'}, {'contact_id': 'Guest790', 'contact_name': 'First Last Name 1', 'contact_email': 'last.first1@example.com', 'contact_phone': '2105555556', 'act_id': '123456'}]

正在创建数据框

df = pd.DataFrame(my_list)

print(df)
  contact_id       contact_name            contact_email contact_phone  act_id
0   Guest789    First Last Name   last.first@example.com    2105555555  123456
1   Guest790  First Last Name 1  last.first1@example.com    2105555556  123456