read_json - python pandas json read
Json anidado a pandas DataFrame con formato especĂfico (1)
Necesito formatear el contenido de un archivo Json en un determinado formato en un DataFrame de pandas para poder ejecutar Pandassql para transformar los datos y ejecutarlos a través de un modelo de puntuación.
file = C: / scoring_model / json.js (los contenidos de ''file'' están abajo)
{
"response":{
"version":"1.1",
"token":"dsfgf",
"body":{
"customer":{
"customer_id":"1234567",
"verified":"true"
},
"contact":{
"email":"[email protected]",
"mobile_number":"0123456789"
},
"personal":{
"gender": "m",
"title":"Dr.",
"last_name":"Muster",
"first_name":"Max",
"family_status":"single",
"dob":"1985-12-23",
}
}
}
Necesito que el marco de datos se vea así (obviamente, todos los valores en la misma fila, intenté formatearlo lo mejor posible para esta pregunta):
version | token | customer_id | verified | email | mobile_number | gender |
1.1 | dsfgf | 1234567 | true | [email protected] | 0123456789 | m |
title | last_name | first_name |family_status | dob
Dr. | Muster | Max | single | 23.12.1985
He examinado todas las otras preguntas sobre este tema, he intentado varias formas de cargar el archivo Json en pandas
`with open(r''C:/scoring_model/json.js'', ''r'') as f:`
c = pd.read_json(f.read())
`with open(r''C:/scoring_model/json.js'', ''r'') as f:`
c = f.readlines()
probé pd.Panel () en esta solución Python Pandas: cómo dividir un diccionario ordenado en una columna de un marco de datos
Los resultados del marco de datos de [yo = f.readlines ()] pensaron en tratar de dividir el contenido de cada celda en función de ("") y encontrar una manera de colocar el contenido de la división en diferentes columnas, pero hasta ahora no ha habido suerte. Su experiencia es muy apreciada. Gracias de antemano.
Si carga todo el json como un dict (o lista), por ejemplo, utilizando json.load, puede usar json_normalize
:
In [11]: d = {"response": {"body": {"contact": {"email": "[email protected]", "mobile_number": "0123456789"}, "personal": {"last_name": "Muster", "gender": "m", "first_name": "Max", "dob": "1985-12-23", "family_status": "single", "title": "Dr."}, "customer": {"verified": "true", "customer_id": "1234567"}}, "token": "dsfgf", "version": "1.1"}}
In [12]: df = pd.io.json.json_normalize(d)
In [13]: df.columns = df.columns.map(lambda x: x.split(".")[-1])
In [14]: df
Out[14]:
email mobile_number customer_id verified dob family_status first_name gender last_name title token version
0 [email protected] 0123456789 1234567 true 1985-12-23 single Max m Muster Dr. dsfgf 1.1