Os pandas não suportam diretamente os quadros de dados 3D. A estrutura fundamental de um quadro de dados de pandas é bidimensional (linhas e colunas). Para representar dados 3D, você precisa usar uma abordagem diferente, normalmente uma delas:
1. Dados do painel (depreciado, mas conceitualmente relevante): Os pandas costumavam ter um objeto `painel`, mas ele está preguiçoso. Era essencialmente um contêiner para vários quadros de dados. Embora não seja diretamente utilizável agora, ajuda a entender a abordagem conceitual:imagine cada quadro de dados representando uma fatia ao longo de uma dimensão.
2. Usando um único dataframe com um multiindex: Este é o método mais eficiente e recomendado. Você cria um multiindex para que suas colunas representem a terceira dimensão.
`` `Python
importar pandas como PD
importar numpy como np
Dados 3D da amostra (2x3x4)
data_3d =np.random.rand (2, 3, 4)
Crie um multiindex para as colunas
Matrizes =[
['A', 'a', 'b', 'b', 'c', 'c'], # camada 1
['X', 'y', 'x', 'y', 'x', 'y'] # camada 2
]
Tuplas =Lista (ZIP (*Matrizes))
Índice =pd.multiindex.from_tuples (tuplas, nomes =['camada1', 'camada2']))
Remodapa os dados em uma matriz 2D adequada para um DataFrame
data_2d =data_3d.rehape (2, 6)
Crie o DataFrame com o MultiIndex
df =pd.dataframe (data_2d, index =range (2), colunas =index)
Impressão (DF)
Acessando dados:
Print ("\ Naccessing elemento em camada1 ='a', camada2 ='x', linha 0:")
print (df.loc [0, ('a', 'x')]))
Acessando uma fatia:
print ("\ Naccessing todos os dados para camada1 ='a':")
print (df.loc [:, 'a'])
#Adding uma nova camada (camada3):
#Noed para reestruturar os dados para este
new_data_3d =np.random.rand (2,3,4,2) #Aded uma dimensão
new_data_2d =new_data_3d.rehape (2,12)
Matrizes =[
['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B'], # Camada 1
['X', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y'] # camada 2
, ['Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1'] # Layer 3
]
Tuplas =Lista (ZIP (*Matrizes))
índice =pd.multiindex.from_tuples (tuplas, nomes =['camada1', 'camada2', 'camada3']))
df_new =pd.dataframe (new_data_2d, index =range (2), colunas =index)
print ("\ ndataframe com uma nova camada3:")
Imprimir (df_new)
`` `
3. Usando um dicionário de dados de dados: Isso é menos eficiente que um multiindex, mas oferece mais flexibilidade para cenários complexos.
`` `Python
dados ={}
para i no intervalo (2):
dados [i] =pd.dataframe (np.random.rand (3, 4))
Acessando dados:
Imprimir (dados [0])
`` `
Escolhendo a abordagem correta: *
MultiIndex: O melhor para a maioria dos casos, oferece bom desempenho e acesso eficiente de dados se sua terceira dimensão for relativamente pequena a moderada.
*
Dicionário de DataFrames: Melhor se você tiver um número significativamente maior de "camadas" em seus dados 3D ou se suas camadas diferentes têm estruturas muito diferentes.
Lembre -se de considerar cuidadosamente como você acessará e manipulará seus dados assim que estiverem estruturados de uma dessas maneiras. A abordagem multiindex é geralmente preferível devido à sua eficiência e às capacidades internas dos pandas para trabalhar com multiindexos. Para conjuntos de dados muito grandes, considere o uso do DASK ou VAEX projetados para computação fora do núcleo.