Convierta múltiples archivos JSON a CSV Python

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *