1. Datos del panel (desaprobado pero conceptualmente relevante):
Los pandas solían tener un objeto 'panel', pero está en desuso. Era esencialmente un contenedor para múltiples marcos de datos. Si bien ahora no se puede usar directamente, ayuda a comprender el enfoque conceptual:imagine que cada marco de datos representa una porción a lo largo de una dimensión.
2. Uso de un solo marco de datos con un multiíndex:
Este es el método más eficiente y recomendado. Creas un multiíndex para tus columnas para representar la tercera dimensión.
`` `Python
importar pandas como PD
importar numpy como np
Datos 3D de muestra (2x3x4)
data_3d =np.random.rand (2, 3, 4)
Crear un multiíndex para las columnas
matrices =[
['A', 'A', 'B', 'B', 'C', 'C'], # Capa 1
['X', 'y', 'x', 'y', 'x', 'y'] # capa 2
]
tuples =list (zip (*matrices))
índice =pd.multiindex.from_tuples (tuples, nombres =['Layer1', 'Layer2'])
Resalva los datos en una matriz 2D adecuada para un DataFrame
data_2d =data_3d.reshape (2, 6)
Crea el DataFrame con el MultiDindex
df =pd.dataframe (data_2d, index =range (2), columns =index)
Imprimir (DF)
Acceso a datos:
print ("\ naccessing Element at layer1 ='a', layer2 ='x', fila 0:")
imprimir (df.loc [0, ('a', 'x')])
Acceder a una porción:
Imprimir ("\ Naccessing Todos los datos para capas1 ='a':")
imprimir (df.loc [:, 'a'])
#Agradecer una nueva capa (Layer3):
#Necido reestructurar los datos para esto
new_data_3d =np.random.rand (2,3,4,2) #Added A Dimension
new_data_2d =new_data_3d.reshape (2,12)
matrices =[
['A', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b'], # capa 1
['X', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y'] # capa 2
, ['Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1'] # Layer 3
]
tuples =list (zip (*matrices))
índice =pd.multiindex.from_tuples (tuples, nombres =['Layer1', 'Layer2', 'Layer3'])
df_new =pd.dataframe (new_data_2d, index =range (2), columnas =index)
imprimir ("\ ndataframe con una nueva capa3:")
Imprimir (df_new)
`` `` ``
3. Uso de un diccionario de marcos de datos:
Esto es menos eficiente que un multiíndex, pero ofrece más flexibilidad para escenarios complejos.
`` `Python
Data ={}
para i en el rango (2):
Datos [i] =pd.dataframe (np.random.rand (3, 4))
Acceso a datos:
Imprimir (datos [0])
`` `` ``
Elegir el enfoque correcto:
* multiíndex: Lo mejor para la mayoría de los casos, ofrece un buen rendimiento y acceso eficiente de datos si su tercera dimensión es relativamente pequeña a moderada.
* Diccionario de Dataframes: Mejor si tiene un número significativamente mayor de "capas" en sus datos 3D o si sus diferentes capas tienen estructuras muy diferentes.
Recuerde considerar cuidadosamente cómo accederá y manipulará sus datos una vez que esté estructurado de una de estas formas. El enfoque multiíntesis es generalmente preferible debido a su eficiencia y a las capacidades incorporadas de los pandas para trabajar con multiíntesis. Para conjuntos de datos muy grandes, considere usar DASK o VAEX que están diseñados para el cálculo fuera del núcleo.