Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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解析为数据帧,但保留id_Python_Json_Pandas - Fatal编程技术网

Python 将JSON解析为数据帧,但保留id

Python 将JSON解析为数据帧,但保留id,python,json,pandas,Python,Json,Pandas,我正在尝试分析一些响应数据(在JSON blob中),并使用字母数字id连接到其他相关记录。我在解析JSON的同时保持id关联方面遇到了问题,因为我的解析方法涉及将JSON记录转换为列表。有没有一个好的方法来实现这一点 此数据来自如下表: 答复| id ---|--- [{”说明:业务类型…| 1bb15c61 [{”说明:业务类型…| 4bc12c99 每个记录都有一个字段,即JSON块(包含多个字典的列表)和一个id JSON看起来像这样,但更长: [{ "description":

我正在尝试分析一些响应数据(在JSON blob中),并使用字母数字id连接到其他相关记录。我在解析JSON的同时保持id关联方面遇到了问题,因为我的解析方法涉及将JSON记录转换为列表。有没有一个好的方法来实现这一点

此数据来自如下表:

答复| id ---|--- [{”说明:业务类型…| 1bb15c61 [{”说明:业务类型…| 4bc12c99

每个记录都有一个字段,即JSON块(包含多个字典的列表)和一个id

JSON看起来像这样,但更长:

[{
    "description": "Business type",
    "input": "sole_proprietorship",
    "result": "approved
}, {
    "description": "Credit score",
    "input": 680,
    "result": "approved"
}]
我正在从PSQL查询中将其读入数据帧。JSON blob称为“响应”。我就是这样解析它的:

parsed_list=[]
对于枚举中的i,j(df['responses']):
尝试:
解析的_list.append(json.loads(j))
除:
通过
解析的_df=[]
对于i,u在枚举(已解析的_列表)中:
parsed_df.append(json_规范化(parsed_list[i]))
解析的_-df=pd.concat(解析的_-df)
这会从JSON生成一个可用的数据帧,但显然会丢失id。一条记录会生成多行数据,理想情况下,我希望给定记录的每一行都与同一id关联,以便稍后可以获取它以连接到其他信息

说明|输入|结果| id
---|---|---|--- 业务类型|独资|批准| 1bb15c61
信用评分| 680 |批准| 1bb15c61业务类型|非营利性|审查| 4bc12c99信用评分| 600 |批准| 4bc12c99


我认为我需要以不同的方式解析JSON,但我不确定如何以保留id的方式进行解析。

使用
zip
函数可能会解决您的问题

df['responses'] = [{"description":"Business type", "input": "sole_proprietorship", "result": "approved"}, {"description": "Credit score","input": 680,"result": "approved"}]
df['id'] = [1bb15c61, 4bc12c99]

for i, j in zip(df['responses'], df['id']):
    print(i, j)
输出

{'description': 'Business type', 'input': 'sole_proprietorship', 'result': 'approved'} 1bb15c61
{'description': 'Credit score', 'input': 680, 'result': 'approved'} 4bc12c99

这就是我最后做的:

def try_parse_json(x):
    try:
        out = json.loads(x)
    except:
        out = "parsing error"
    return out

df_json = [try_parse_json(x) for x in parsed_df.responses]
flatten_df = pd.DataFrame(data=df_json, index=responses.id)

这给了我一个宽大的数据框架,在对应的JSON旁边有一个id字段,我可以将其进一步处理为可用状态。

完全不清楚您从何处提取id。此外,解析JSON并不是真正可以协商的,结果也不是可变的,因此您认为解析错误的结论可能是错误的。id是来自包含JSON块的表。我不认为我解析错了,但我正在寻找一种方法,允许我保持与id的关联。你能更新数据描述以包含id字段吗?所以,所有JSON的说法都是转移视线,因为JSON中从未包含id。相反,它是一个idDB与表中的一行关联。在这种情况下,您需要在从DB中检索它之后自己跟踪它。建议:首先定义您最终想要的数据结构,然后尝试从数据中获取它。这与我想要的更接近,但我在解析id时遇到了问题,当时它只是一个附录d到最后。谢谢你的建议!