Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—通过用户定义函数解析JSON数据_Python_Json_Pandas - Fatal编程技术网

Python—通过用户定义函数解析JSON数据

Python—通过用户定义函数解析JSON数据,python,json,pandas,Python,Json,Pandas,我有一个 在JSON文本文件中,有id、title、context、question、is_impossable、answer_start和text等列 我试图将其读入熊猫数据帧。我不熟悉Python和JSON。让我们来看看函数定义 这是我的密码 def squad_json_pd_df(json_dict): mylistsize = len((list(json_normalize(json_dict,'data')['title']))) row = [] for

我有一个

在JSON文本文件中,有id、title、context、question、is_impossable、answer_start和text等列

我试图将其读入熊猫数据帧。我不熟悉Python和JSON。让我们来看看函数定义

这是我的密码

def squad_json_pd_df(json_dict):
    mylistsize = len((list(json_normalize(json_dict,'data')['title'])))
    row = []
    for i in range(0,mylistsize):
        data = [c for c in json_dict['data']][i]
        df = pd.DataFrame()
        data_paragraphs = data['paragraphs']
        mytitle = data['title']
        for article_dict in data_paragraphs:
            for answers_dict in article_dict['qas']:
                for answer in answers_dict['answers']:
                    row.append((
                                answers_dict['id'],
                                mytitle,
                                article_dict['context'], 
                                answers_dict['question'], 
                                answers_dict['is_impossible'],
                                answer['answer_start'],
                                answer['text']
                               ))
            df = pd.concat([df, pd.DataFrame.from_records(row, columns=['id', 'title','context', 'question','is_impossible', 'answer_start', 'answer'])], axis=0, ignore_index=True)
            df.drop_duplicates(inplace=True)
    return df

with open(dev_datapath) as file:
    dev_dict = json.load(file)
    dev_df = squad_json_pd_df(dev_dict)
所以这里的问题是-is_Impossible列中既有真值也有假值(当我在文本文件中看到它时)。但在我加载熊猫数据帧后,我只能看到虚假记录

我对这个问题的理解是——对于真实记录,JSON文件结构可能不同,而我没有在Python中正确解析它

不可能的错误结构如下所示

不可能的真实结构如下所示


你之所以没有得到“True”-s,是因为它们在不同的json标记下-它们在“似是而非的答案”下,而不是我认为的答案下。在您的代码中,答案dict仅从json中的“answers”标记中提取-因此您从未实际循环过似是而非的答案列表,在该列表中,标记将被设置为True

您能为json行提供一个示例吗?我想你们中的很多人都可以用更简单的东西来代替for循环,比如数据。get('parations',{})。get('qas',{})。get('answers',{})。get('id),比如第一行-对不起,我可以看到文件…@AnnaSemjén现在把它添加到问题中了。