Crear marcos de datos anidados en Pandas

Salman Mehmood 21 junio 2023
  1. Marcos de datos anidados de Pandas
  2. Crear marcos de datos anidados en Pandas
Crear marcos de datos anidados en Pandas

Este artículo discutirá cómo leer un marco de datos anidado de Pandas. Esto también demostrará cómo solucionar los problemas cuando leemos el marco de datos anidado de Pandas en Python.

Marcos de datos anidados de Pandas

Pandas DataFrame es una estructura que almacena datos con dos dimensiones y las etiquetas correspondientes a esas dimensiones. Los marcos de datos se han aplicado ampliamente en muchos campos intensivos en datos, incluida la ciencia de datos, el aprendizaje automático, la computación científica y muchos otros.

Los marcos de datos son comparables a las tablas y hojas de cálculo SQL que se pueden manipular en aplicaciones como Excel y Calc.

Debido a que son un componente esencial de los ecosistemas Python y NumPy, los marcos de datos suelen ser superiores a las tablas y hojas de cálculo en términos de velocidad, facilidad de uso y potencia. Este es el caso de muchas aplicaciones.

Al manejar grandes cantidades de datos, puede ocurrir una situación en la que se requiera crear una instancia de Dataframe que contenga más instancias dentro de ella.

Considere el siguiente código:

import pandas as pd

data = [
    {"a": 1, "b": 2, "c": 3},
    {"a": 10, "b": 20, "c": 30},
    {"a": 40, "b": 50, "c": 60},
    {"a": 70, "b": 80, "c": 90},
]

data2 = [
    {"d": 1, "e": 2, "f": 3},
    {"d": 10, "e": 20, "f": 30},
    {"d": 40, "e": 50, "f": 60},
    {"d": 70, "e": 80, "f": 90},
]

data3 = [
    {"g": 1, "h": 2, "i": 3},
    {"g": 10, "h": 20, "i": 30},
    {"g": 40, "h": 50, "i": 60},
    {"g": 70, "h": 80, "i": 90},
]


df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)

print(
    "Dataframe 1: \n"
    + str(df)
    + "\n\nDataframe 2:\n"
    + str(df2)
    + "\n\nDataframe 3:\n"
    + str(df3)
)

Producción :

Dataframe 1: 
    a   b   c
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 2:
    d   e   f
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 3:
    g   h   i
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

En el código anterior, se han declarado y almacenado tres instancias de Dataframe diferentes en las variables df, df2 y df3, respectivamente. Bajo el supuesto de que las tres instancias de Dataframe diferentes están estrechamente relacionadas, puede volverse tedioso acceder a ellas por separado, especialmente en los casos en que los datos en las instancias son grandes.

Para superar este problema, recopilar los datos en un solo lugar puede ser un enfoque sensato para facilitar el acceso. Un Dataframe anidado puede ser una posible solución, ya que todas las instancias de Dataframe relacionadas se pueden reunir en una nueva instancia única de Dataframe.

Por otro lado, el Dataframe anidado puede no ser la mejor opción y solo es adecuado para escenarios y casos de uso muy específicos.

Crear marcos de datos anidados en Pandas

Al igual que a un Dataframe se le pueden asignar valores normales, también puede recibir instancias de Dataframe y crear un nuevo Dataframe que consta de varias instancias de Dataframe definidas por el usuario, que en otras palabras, se denomina Dataframe anidado.

Considere el siguiente código:

import pandas as pd


data = [
    {"a": 1, "b": 2, "c": 3},
    {"a": 10, "b": 20, "c": 30},
    {"a": 40, "b": 50, "c": 60},
    {"a": 70, "b": 80, "c": 90},
]

data2 = [
    {"d": 1, "e": 2, "f": 3},
    {"d": 10, "e": 20, "f": 30},
    {"d": 40, "e": 50, "f": 60},
    {"d": 70, "e": 80, "f": 90},
]

data3 = [
    {"g": 1, "h": 2, "i": 3},
    {"g": 10, "h": 20, "i": 30},
    {"g": 40, "h": 50, "i": 60},
    {"g": 70, "h": 80, "i": 90},
]

df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)


df4 = pd.DataFrame({"idx": [1, 2, 3], "dfs": [df, df2, df3]})

print(df4)

Esto da la siguiente salida:

   idx                                                dfs
0    1      a   b   c
0   1   2   3
1  10  20  30
2  4...
1    2      d   e   f
0   1   2   3
1  10  20  30
2  4...
2    3      g   h   i
0   1   2   3
1  10  20  30
2  4...

A partir del resultado anterior, se puede ver que simplemente imprimir la instancia de Dataframe no muestra bien todo el Dataframe. Para que la salida sea un poco más comprensible, tenemos que acceder a los elementos Dataframe individualmente, que son instancias de Dataframe en nuestro caso.

Para acceder a los elementos, considere la siguiente línea:

print(
    "Dataframe 1: \n"
    + str(df4["dfs"].iloc[0])
    + "\n\nDataframe 2:\n"
    + str(df4["dfs"].iloc[1])
    + "\n\nDataframe 3:\n"
    + str(df4["dfs"].iloc[2])
)

Esto da la salida:

Dataframe 1: 
    a   b   c
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 2:
    d   e   f
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 3:
    g   h   i
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Para anidar instancias de Dataframe dentro de otra instancia, debemos crear una nueva instancia de Dataframe y asignar las instancias de Dataframe creadas previamente al Dataframe recién creado.

Asignar instancias de Dataframe al Dataframe recién creado es bastante simple y no es diferente de los métodos seguidos al asignar datos normales a una instancia de Dataframe.

En nuestro caso, se creó una lista que constaba de la instancia de Dataframe requerida, que luego se pasó al constructor de la clase Dataframe al crear la nueva instancia de Dataframe creada específicamente para actuar como un Dataframe que consta de varios Dataframes.

Como con cualquier problema, puede haber muchos enfoques potenciales para este problema. Un Dataframe anidado se utiliza en escenarios y casos de uso específicos.

En general, se recomienda investigar primero cómo la situación requiere que se estructuren los datos y qué tipo de operaciones se realizarán en los datos. En base a estas condiciones, se puede determinar si el uso de Dataframes anidados es una opción viable o no.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Pandas Dataframe