如何在df中转换此嵌套JSON文件?

如何在df中转换此嵌套JSON文件?,json,pandas,pytorch,Json,Pandas,Pytorch,我必须为一个项目处理以下问题: 特别是,我需要获得一个用于将这些数据格式化为NLP任务中神经网络的输入的文件。Json格式如下所示: json file ├── "data" │ └── [i] │ ├── "paragraphs" │ │ └── [j] │ │ ├── "context": "paragraph text" │ │ └

我必须为一个项目处理以下问题:

特别是,我需要获得一个用于将这些数据格式化为NLP任务中神经网络的输入的文件。Json格式如下所示:

json file
├── "data"
│   └── [i]
│       ├── "paragraphs"
│       │   └── [j]
│       │       ├── "context": "paragraph text"
│       │       └── "qas"
│       │           └── [k]
│       │               ├── "answers"
│       │               │   └── [l]
│       │               │       ├── "answer_start": N
│       │               │       └── "text": "answer"
│       │               ├── "id": "<uuid>"
│       │               └── "question": "paragraph question?"
│       └── "title": "document id"
└── "version": 1.1
我努力尝试使用.json_normalize方法,但没有得到任何结果。我注意到,我的大多数尝试(那些没有以错误结束的尝试)都以将“数据”和“版本”识别为索引,并将文本的其余部分识别为唯一对象而告终,如下所示:

f = open("SQuAD_it-test.json", "r",encoding="Latin-1" )

data = json.load(f)

df = pd.json_normalize(data)
df.sample(1)


                                         data         version
0   [{'paragraphs': [{'qas': [{'question': 'Quando...   1.1
如果我尝试可视化更多的样本,我会出现一个错误,它告诉我人口只有1

我想要的输出是这样的,选择要使用的索引可以位于树的不同级别:

df.sample(5)

        title    context   question  text  answer_start
        str1     str6      str11     str16    N1
        str2     str7      str12     str17    N2
        str3     str8      str13     str13    N3
        str4     str9      str14     str18    N4
        str5     str10     str15     str19    N5
我也研究过的论点


但是我不能完全理解这个解释。您能帮助我吗?

由于给定的json有许多嵌套文件,我们可以使用
record\u path
meta
参数来获取所需的数据帧:

df = pd.json_normalize(data, record_path=['data', 'paragraphs', 'qas', 'answers'], 
     meta=[['data','title'], ['data', 'paragraphs','context'], 
     ['data', 'paragraphs', 'qas','question']])
请注意,输出键的顺序与所需输出表中给出的顺序不同。此外,键的名称将略有不同(完全限定)

输出:

Index(['text', 'answer_start', 'data.title', 'data.paragraphs.context',
   'data.paragraphs.qas.question'],
  dtype='object')
谢谢你,我发现(对于那些可能感兴趣的人来说)这种方法可以给df的列起新名字:df.columns=['text','answer_start','title','context','question']我没有发现如何改变顺序,但我认为这不相关
Index(['text', 'answer_start', 'data.title', 'data.paragraphs.context',
   'data.paragraphs.qas.question'],
  dtype='object')