with read_json read query for python json pandas nested format

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