Estoy usando python 3.6 y tratando de descargar el archivo json (350 MB) como los pandas dataframe, utilizando el siguiente código. Sin embargo, me sale el siguiente error:

data_json_str = "[" + ",".join(data) + "]
"TypeError: sequence item 0: expected str instance, bytes found

Cómo se puede solucionar el error?

import pandas as pd

# read the entire file into a python array
with open('C:/Users/Alberto/nutrients.json', 'rb') as f:
   data = f.readlines()

# remove the trailing "\n" from each line
data = map(lambda x: x.rstrip(), data)

# each element of 'data' is an individual JSON object.
# i want to convert it into an *array* of JSON objects
# which, in and of itself, is one large JSON object
# basically... add square brackets to the beginning
# and end, and have all the individual business JSON objects
# separated by a comma
data_json_str = "[" + ",".join(data) + "]"

# now, load it into pandas
data_df = pd.read_json(data_json_str)

4 Comentarios

  1. 1

    Si abre el archivo como binario ('rb'), obtendrá bytes. Cómo acerca de:

    with open('C:/Users/Alberto/nutrients.json', 'rU') as f:
  2. 26

    De su código, parece que se carga un archivo JSON que tiene datos JSON en cada línea por separado. read_json admite un lines argumento de datos como este:

    data_df = pd.read_json('C:/Users/Alberto/nutrients.json', lines=True)

    Nota

    Quitar lines=True si usted tiene un solo objeto JSON en lugar de que los objetos JSON en cada línea.

  3. 5

    Usando json módulo se puede analizar el json en un objeto de python, a continuación, crear un dataframe de que:

    import json
    import pandas as pd
    with open('C:/Users/Alberto/nutrients.json', 'r') as f:
        data = json.load(f)
    df = pd.DataFrame(data)
    • He utilizado el código de arriba y tiene «JSONDecodeError: datos Adicionales: línea 2 columna 1 (char 110)»
  4. 1

    si quieres convertirlo en un matriz de objetos JSON, creo que esto va a hacer lo que usted quiere

    import json
    data = []
    with open('nutrients.json', errors='ignore') as f:
        for line in f:
            data.append(json.loads(line))
    print(data[0])

Dejar respuesta

Please enter your comment!
Please enter your name here