es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generar un nuevo Dataframe a partir de una colección anidada de arrays de MongoDB.

Estoy tratando de generar un nuevo dataframe a partir de una colección de mongodb, el objetivo es crear un nuevo df que represente solo la columna ‘events’:

Por ejemplo:

{
    "_id" : 1641008579,
    "status" : "init",
    "description" : "Test",
    "attachment" : null,
    "start" : "08:00",
    "user" : "Jenny",
    "timestamp" : ISODate("2022-01-01T04:43:11.380Z"),
    "events" : [
        {
            "id" : 1641008580,
            "status" : "start",
            "description" : "First Event",
            "user" : "Jenny",
            "timestamp" : ISODate("2022-01-01T04:43:11.380Z")
        },
        {
            "id" : 1641008581,
            "status" : "progress",
            "description" : "Middle of the Event",
            "user" : "Joe",
            "timestamp" : ISODate("2022-01-01T05:43:11.380Z")
        },
        {
            "id" : 1641008582,
            "status" : "end",
            "description" : "Last Event",
            "user" : "Alain",
            "timestamp" : ISODate("2022-01-01T06:43:11.380Z")
        }
    ]
}

¿Alguna idea de cómo comenzar un enfoque para obtener lo siguiente?

El evento_df debería ser como el siguiente:

   id          status      description             user    timestamp
0   1641008580  start       First Event             Jenny   "2022-01-01T04:43:11.380Z"
1   1641008581  progress    Middle of the Event     Joe     "2022-01-01T05:43:11.380Z"
2   1641008582  end         Last Event              Alain   "2022-01-01T06:43:11.380Z"

/K

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para generar un nuevo dataframe a partir de una colección de MongoDB, podemos seguir los siguientes pasos:

    1. Conéctate a la base de datos de MongoDB utilizando un controlador de Python (como pymongo).
    2. Consulta la colección deseada y recupera los documentos que contengan el campo “events”.
    3. Extrae el campo “events” de cada documento y crea una lista de diccionarios para representar los datos en un formato tabular.
    4. Convierte la lista de diccionarios en un dataframe de pandas utilizando la función constructora pd.DataFrame().

    Aquí tienes un código de ejemplo para realizar esta tarea:

    import pymongo
    import pandas as pd
    
    # Conéctate a la base de datos de MongoDB
    client = pymongo.MongoClient("mongodb://localhost:27017/")
    db = client["mydatabase"]
    collection = db["mycollection"]
    
    # Consulta la colección y recupera los documentos que contengan el campo "events"
    query = {"events": {"$exists": True}}
    docs = collection.find(query)
    
    # Extrae el campo "events" de cada documento y crea una lista de diccionarios
    data = []
    for doc in docs:
        for event in doc["events"]:
            data.append({
                "id": event["id"],
                "status": event["status"],
                "description": event["description"],
                "user": event["user"],
                "timestamp": event["timestamp"]
            })
    
    # Convierte la lista de diccionarios en un dataframe de pandas
    event_df = pd.DataFrame(data)
    
    # Opcional: convierte la columna "timestamp" en un objeto de fecha y hora
    event_df["timestamp"] = pd.to_datetime(event_df["timestamp"])
    
    # Imprime el dataframe resultante
    print(event_df)
    

    Este código debería producir la salida deseada:

              id    status        description   user               timestamp
    0  1641008580     start         First Event  Jenny 2022-01-01 04:43:11.380
    1  1641008581  progress  Middle of the Event    Joe 2022-01-01 05:43:11.380
    2  1641008582       end          Last Event  Alain 2022-01-01 06:43:11.380
    

Comments are closed.