如何在不丢失值的情况下将 json 解析为 pandas 数据框? [复制]
Posted
技术标签:
【中文标题】如何在不丢失值的情况下将 json 解析为 pandas 数据框? [复制]【英文标题】:How can I parse a json to a pandas dataframe without losing values? [duplicate] 【发布时间】:2021-05-28 09:55:22 【问题描述】:我正在尝试将 json 解析为数据框。我专注于 json 的第一个键(验证)。 json的结构非常标准,如下例:
"validations": [
"id": "1111111-2222-3333-4444-555555555555",
"created_at": "2020-02-19T14:35:58-03:00",
"finished_at": "2020-02-19T14:36:01-03:00",
"processing_status": "concluded",
"receivable_id": "VAL-AAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE",
"external_reference": "FFFFFFFF-GGGG-HHHH-IIII-JJJJJJJJJJJJ",
"batch_id": "e2fb8d34-8c53-4910-b7a4-602ab6845855",
"portfolio":
"id": "57a3e56a-347b-449c-8f1a-253baba90e7a",
"nome": "COMPANY_NAME"
],
"pages":
"per_page": 10,
"page": 1
我正在使用以下代码:
import json as json
import pandas as pd
import os
print(os.getcwd()) ## point out the directory you're working on this cell
filename = r"file_path\file_name.json"
f = open(filename)
data1 = json.loads(f.read())
df = pd.json_normalize(data1)
data1.keys()
## => returns: dict_keys(['validacoes', 'paginacao'])
res = dict((k, data1[k]) for k in ['validacoes']
if k in data1)
res.keys()
## => returns dict_keys(['validacoes'])
df = pd.DataFrame(res, columns=['id', 'data_criacao', 'data_finalizacao', 'status_do_processamento', 'recebivel_id','referencia_externa', 'lote_id', 'veiculo'])
df.head()
## returns=> a dataframe with no values on the columns, as if they were empty from the json
| id | created_at | finished_at | processing_status | receivable_id | external_reference | batch_id | external_reference | portfolio |
所以,我已经在文本编辑器上检查了原始文件,是的,json 已正确映射到值。
并且格式在整个文件中都是标准化的。
关于为什么 json 中的数据在进程中丢失的任何想法?
【问题讨论】:
这能回答你的问题吗? JSON to pandas DataFrame 读取 json 后执行此操作:df = pd.DataFrame(data1["validations"])
您的数据框已准备就绪!
【参考方案1】:
您需要扁平化您的 JSON。
这篇文章应该可以帮助您: Python flatten multilevel/nested JSON
另外,pandas 有一个简单的json_normalize
方法供您使用。
【讨论】:
以上是关于如何在不丢失值的情况下将 json 解析为 pandas 数据框? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在不丢失 exif 数据的情况下将 UIImage 转换为 JPEG?