使用 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
我有一个 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