0

我有project.json文件,其中包含这样的数据:

{"student_id": "ST0001", "project": [{"subject_id": "S003", "date_of_submission": "2021-05-23 20:03:05"}, {"subject_id": "S004", "date_of_submission": "2021-05-24 21:03:05"}, {"subject_id": "S005", "date_of_submission": "2021-05-30 05:09:30"}], "project_year": "Second"}
{"student_id": "ST0002", "project": [{"subject_id": "S003", "date_of_submission": "2021-06-02 15:05:05"}, {"subject_id": "S007", "date_of_submission": "2021-04-28 21:03:01"}], "project_year": "Second"}
{"student_id": "ST0002", "project": [{"subject_id": "S0018", "date_of_submission": "2020-06-03 08:15:21"}], "project_year": "First"}

我需要将嵌套subject_id并提取date_of_submission到一个单独的列中,例如:

学生卡 主题ID 提交日期 项目年
ST0001 S003 2021 年 5 月 23 日 20:03 第二
ST0001 S004 24/05/2021 21:03 第二
ST0001 S005 30/05/2021 05:09 第二
ST0002 S003 2021 年 2 月 6 日 15:05 第二
ST0002 S007 28/04/2021 21:03 第二
ST0002 S0018 2020 年 3 月 6 日 08:15 第一的

我想我们可以用它json_normalize来提取一个级别,有人可以帮我完成这个吗?

import pandas as pd

df=pd.read_json('project.json', lines=True)

df = pd.DataFrame(df).explode('project')
4

1 回答 1

0

您可以尝试在方法中使用record_pathmeta参数json_normailze()

s=pd.read_json('project.json',lines=True).melt()['value'].tolist()
df=pd.json_normalize(s,record_path=['project'],meta=['student_id','project_year'])
#here data is your json data

输出df

subject_id  date_of_submission  student_id  project_year
0   S003    2021-05-23 20:03:05     ST0001  Second
1   S004    2021-05-24 21:03:05     ST0001  Second
2   S005    2021-05-30 05:09:30     ST0001  Second
3   S003    2021-06-02 15:05:05     ST0002  Second
4   S007    2021-04-28 21:03:01     ST0002  Second
5   S0018   2020-06-03 08:15:21     ST0002  First
于 2021-07-31T15:21:11.617 回答