En este artículo, aprenderemos cómo convertir múltiples archivos JSON a un archivo CSV en Python. Antes de eso, recuerda algunos términos:
- Archivo JSON : un archivo JSON puede ser un archivo que almacena estructuras de datos simples y objetos en formato de notación de objetos JavaScript (JSON), que puede ser un formato de intercambio de datos estándar. Se utiliza principalmente para transmitir datos entre una aplicación de Internet y un servidor.
- Archivo CSV : un CSV puede ser un archivo de valores separados por comas, que permite guardar datos en un formato tabular. Los CSV aparecen como una hoja de cálculo común pero con una extensión .CSV . Los archivos CSV a menudo se usan con casi cualquier programa de hoja de cálculo, como Microsoft Excel o Google Spreadsheets.
Para formar un archivo CSV a partir de varios archivos JSON, tenemos que usar un archivo json anidado, aplanar el marco de datos o cargar los archivos json en forma de marco de datos, concatenar/fusionar/unirlos para formar un marco de datos (al menos una columna debe ser mismo en todos los archivos json) y, por último, convierta este marco de datos en un archivo CSV. Este procedimiento completo de la tarea dada se puede entender con la ayuda de los ejemplos que se dan a continuación:
Ejemplo 1: si todas las columnas coinciden
En este ejemplo, cargaremos dos archivos json, los concatenaremos entre sí y los convertiremos en un archivo CSV. Los archivos json utilizados para esto son:
archivo1.json
{ "ID":{ "0":23, "1":43, "2":12, "3":13, "4":67, "5":89 }, "Name":{ "0":"Ram", "1":"Deep", "2":"Yash", "3":"Aman", "4":"Arjun", "5":"Aditya" }, "Marks":{ "0":89, "1":97, "2":45, "3":78, "4":56, "5":76 }, "Grade":{ "0":"B", "1":"A", "2":"F", "3":"C", "4":"E", "5":"C" } }
archivo2.json
{ "ID":{ "0":90, "1":56, "2":34, "3":96, "4":45 }, "Name":{ "0":"Akash", "1":"Chalsea", "2":"Divya", "3":"Sajal", "4":"Shubham" }, "Marks":{ "0":81, "1":87, "2":100, "3":89, "4":78 }, "Grade":{ "0":"B", "1":"B", "2":"A", "3":"B", "4":"C" } }
Paso 1: Cargue los archivos json con la ayuda del marco de datos de pandas.
Paso 2: concatene los marcos de datos en un solo marco de datos.
Paso 3: Convierta el marco de datos concatenado en un archivo CSV.
El código completo con el resultado se muestra a continuación:
Código:
Python3
# importing packages import pandas as pd # load json file using pandas df1 = pd.read_json('file1.json') # view data print(df1) # load json file using pandas df2 = pd.read_json('file2.json') # view data print(df2) # use pandas.concat method df = pd.concat([df1,df2]) # view the concatenated dataframe print(df) # convert dataframe to csv file df.to_csv("CSV.csv",index=False) # load the resultant csv file result = pd.read_csv("CSV.csv") # and view the data print(result)
Producción:
ID Name Marks Grade 0 23 Ram 89 B 1 43 Deep 97 A 2 12 Yash 45 F 3 13 Aman 78 C 4 67 Arjun 56 E 5 89 Aditya 76 C ID Name Marks Grade 0 90 Akash 81 B 1 56 Chalsea 87 B 2 34 Divya 100 A 3 96 Sajal 89 B 4 45 Shubham 78 C ID Name Marks Grade 0 23 Ram 89 B 1 43 Deep 97 A 2 12 Yash 45 F 3 13 Aman 78 C 4 67 Arjun 56 E 5 89 Aditya 76 C 0 90 Akash 81 B 1 56 Chalsea 87 B 2 34 Divya 100 A 3 96 Sajal 89 B 4 45 Shubham 78 C ID Name Marks Grade 0 23 Ram 89 B 1 43 Deep 97 A 2 12 Yash 45 F 3 13 Aman 78 C 4 67 Arjun 56 E 5 89 Aditya 76 C 6 90 Akash 81 B 7 56 Chalsea 87 B 8 34 Divya 100 A 9 96 Sajal 89 B 10 45 Shubham 78 C
Ejemplo 2: si algunas columnas coinciden
En este ejemplo, cargaremos dos archivos json, los fusionaremos y los convertiremos en un archivo CSV. Los archivos json utilizados para esto son:
archivo3.json
{ "ID":{ "0":23, "1":43, "2":12, "3":13, "4":67, "5":89 }, "Name":{ "0":"Ram", "1":"Deep", "2":"Yash", "3":"Aman", "4":"Arjun", "5":"Aditya" }, "Marks":{ "0":89, "1":97, "2":45, "3":78, "4":56, "5":76 } }
archivo4.json
{ "ID":{ "0":23, "1":43, "2":12, "3":67, "4":89 }, "Name":{ "0":"Ram", "1":"Deep", "2":"Yash", "3":"Arjun", "4":"Aditya" }, "Grade":{ "0":"B", "1":"A", "2":"F", "3":"E", "4":"C" } }
Paso 1: Cargue los archivos json con la ayuda del marco de datos de pandas.
Paso 2: combine los marcos de datos por diferentes métodos como uniones internas/externas/izquierda/derecha.
Paso 3: Convierta el marco de datos combinado en un archivo CSV.
El código completo con el resultado se muestra a continuación:
Código:
Python3
# importing packages import pandas as pd # load json file using pandas df1 = pd.read_json('file3.json') # view data print(df1) # load json file using pandas df2 = pd.read_json('file4.json') # view data print(df2) # use pandas.merge method df_inner = pd.merge(df1, df2, how='inner', left_on=[ 'ID', 'Name'], right_on=['ID', 'Name']) df_outer = pd.merge(df1, df2, how='outer', left_on=[ 'ID', 'Name'], right_on=['ID', 'Name']) df_left = pd.merge(df1, df2, how='left', left_on=[ 'ID', 'Name'], right_on=['ID', 'Name']) df_right = pd.merge(df1, df2, how='right', left_on=[ 'ID', 'Name'], right_on=['ID', 'Name']) # convert dataframe to csv file df_inner.to_csv("CSV_inner.csv", index=False) df_outer.to_csv("CSV_outer.csv", index=False) df_left.to_csv("CSV_left.csv", index=False) df_right.to_csv("CSV_right.csv", index=False) # load the resultant csv file result_inner = pd.read_csv("CSV_inner.csv") result_outer = pd.read_csv("CSV_outer.csv") result_left = pd.read_csv("CSV_left.csv") result_right = pd.read_csv("CSV_right.csv") # and view the data print(result_outer) print(result_inner) print(result_left) print(result_right)
Producción:
ID Name Marks 0 23 Ram 89 1 43 Deep 97 2 12 Yash 45 3 13 Aman 78 4 67 Arjun 56 5 89 Aditya 76 ID Name Grade 0 23 Ram B 1 43 Deep A 2 12 Yash F 3 67 Arjun E 4 89 Aditya C ID Name Marks Grade 0 23 Ram 89 B 1 43 Deep 97 A 2 12 Yash 45 F 3 13 Aman 78 NaN 4 67 Arjun 56 E 5 89 Aditya 76 C ID Name Marks Grade 0 23 Ram 89 B 1 43 Deep 97 A 2 12 Yash 45 F 3 67 Arjun 56 E 4 89 Aditya 76 C ID Name Marks Grade 0 23 Ram 89 B 1 43 Deep 97 A 2 12 Yash 45 F 3 13 Aman 78 NaN 4 67 Arjun 56 E 5 89 Aditya 76 C ID Name Marks Grade 0 23 Ram 89 B 1 43 Deep 97 A 2 12 Yash 45 F 3 67 Arjun 56 E 4 89 Aditya 76 C
Ejemplo 3: si se proporciona un archivo json anidado
En este ejemplo, cargaremos un archivo json anidado, lo aplanaremos y luego lo convertiremos en un archivo CSV. El archivo json utilizado para esto es:
archivo5.json
{ "tickets":[ { "Name": "Liam", "Location": { "City": "Los Angeles", "State": "CA" }, "hobbies": [ "Piano", "Sports" ], "year" : 1985, "teamId" : "ATL", "playerId" : "barkele01", "salary" : 870000 }, { "Name": "John", "Location": { "City": "Los Angeles", "State": "CA" }, "hobbies": [ "Music", "Running" ], "year" : 1985, "teamId" : "ATL", "playerId" : "bedrost01", "salary" : 550000 } ], "count": 2 }
Paso 1: Cargue el archivo json anidado con la ayuda del método json.load().
Paso 2: aplane los diferentes valores de columna usando métodos pandas.
Paso 3: Convierta el marco de datos aplanado en un archivo CSV.
Repita los pasos anteriores para ambos archivos anidados y luego siga el ejemplo 1 o el ejemplo 2 para la conversión. Para convertir un solo archivo json anidado, siga el método que se indica a continuación.
El código completo con el resultado se muestra a continuación:
Código:
Python3
# importing packages import pandas as pd import json # load json file using json.load with open('file5.json') as file: data = json.load(file) # view data print(data) # form the dataframe df = pd.DataFrame(data['tickets']) # view dataframe print(df) # flattern the dataframe and remove unnecessary columns for i, item in enumerate(df['Location']): df['location_city'] = dict(df['Location'])[i]['City'] df['location_state'] = dict(df['Location'])[i]['State'] for i, item in enumerate(df['hobbies']): df['hobbies_{}'.format(i)] = dict(df['hobbies'])[i] df = df.drop({'Location', 'hobbies'}, axis=1) # view dataframe print(df) # convert dataframe to csv file df.to_csv("CSV.csv", index=False) # load the resultant csv file result = pd.read_csv("CSV.csv") # and view the data print(result)
Producción:
{‘boletos’: [{‘Nombre’: ‘Liam’, ‘Ubicación’: {‘Ciudad’: ‘Los Ángeles’, ‘Estado’: ‘CA’}, ‘pasatiempos’: [‘Piano’, ‘Deportes’ ], ‘año’: 1985, ‘teamId’: ‘ATL’, ‘playerId’: ‘barkele01’, ‘salario’: 870000}, {‘Nombre’: ‘Juan’, ‘Ubicación’: {‘Ciudad’: ‘ Los Ángeles’, ‘Estado’: ‘CA’}, ‘pasatiempos’: [‘Música’, ‘Correr’], ‘año’: 1985, ‘teamId’: ‘ATL’, ‘playerId’: ‘bedrost01’, ‘ salario’: 550000}], ‘recuento’: 2}
Ubicación Nombre hobbies playerId \
0 {‘Ciudad’: ‘Los Ángeles’, ‘Estado’: ‘CA’} Liam [Piano, Deportes] barkele01
1 {‘Ciudad’: ‘Los Ángeles’, ‘Estado’: ‘CA’} John [Música, Correr] bedrost01
salario equipoId año
0 870000 ATL 1985
1 550000 ATL 1985
Nombre playerId salario teamId año ubicación_ciudad ubicación_estado \
0 Liam barkele01 870000 ATL 1985 Los Ángeles CA
1 John bedrost01 550000 ATL 1985 Los Ángeles CA
aficiones_0 aficiones_1
0 música para piano
1 Deportes Correr
Nombre playerId salario teamId año ubicación_ciudad ubicación_estado \
0 Liam barkele01 870000 ATL 1985 Los Ángeles CA
1 John bedrost01 550000 ATL 1985 Los Ángeles CA
aficiones_0 aficiones_1
0 música para piano
1 Deportes Correr
Publicación traducida automáticamente
Artículo escrito por deepanshu_rustagi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA