Pandas ondersteunt niet rechtstreeks 3D-dataframes. De fundamentele structuur van een Pandas DataFrame is tweedimensionaal (rijen en kolommen). Om 3D-gegevens weer te geven, moet u een andere aanpak gebruiken, meestal een van deze:
1. Paneelgegevens (verouderd maar conceptueel relevant):
Panda's hadden vroeger een 'Panel'-object, maar dit is verouderd. Het was in wezen een container voor meerdere DataFrames. Hoewel het nu niet direct bruikbaar is, helpt het de conceptuele benadering te begrijpen:stel je voor dat elk DataFrame een segment langs één dimensie vertegenwoordigt.
2. Een enkel DataFrame gebruiken met een MultiIndex:
Dit is de meest efficiënte en aanbevolen methode. U maakt een MultiIndex voor uw kolommen om de derde dimensie weer te geven.
```python
importeer panda's als pd
importeer numpy als np
Voorbeeld van 3D-gegevens (2x3x4)
data_3d =np.random.rand(2, 3, 4)
Maak een MultiIndex voor de kolommen
matrices =[
['A', 'A', 'B', 'B', 'C', 'C'], # Laag 1
['X', 'Y', 'X', 'Y', 'X', 'Y'] # Laag 2
]
tupels =lijst(zip(*arrays))
index =pd.MultiIndex.from_tuples(tuples, namen=['Laag1', 'Laag2'])
Geef de gegevens een nieuwe vorm in een 2D-array die geschikt is voor een DataFrame
data_2d =data_3d.reshape(2, 6)
Maak het DataFrame met de MultiIndex
df =pd.DataFrame(data_2d, index=bereik(2), kolommen=index)
afdrukken(df)
Toegang tot gegevens:
print("\nToegang tot element op Laag1='A', Laag2='X', rij 0:")
print(df.loc[0, ('A', 'X')])
Toegang tot een segment:
print("\nToegang tot alle gegevens voor Layer1='A':")
print(df.loc[:, 'A'])
#Een nieuwe laag toevoegen (Laag3):
#Hiervoor moeten de gegevens worden geherstructureerd
new_data_3d =np.random.rand(2,3,4,2) #Een dimensie toegevoegd
nieuwe_data_2d =nieuwe_data_3d.reshape(2,12)
matrices =[
['A', 'A', 'A', 'A', 'A', 'A','B', 'B', 'B', 'B', 'B', 'B'], # Laag 1
['X', 'Y', 'X', 'Y', 'X', 'Y','X', 'Y', 'X', 'Y', 'X', 'Y'] # Laag 2
,['Z1', 'Z1','Z1','Z1','Z1','Z1','Z1','Z1','Z1','Z1','Z1','Z1'] # Laag 3
]
tupels =lijst(zip(*arrays))
index =pd.MultiIndex.from_tuples(tuples, namen=['Laag1', 'Laag2','Laag3'])
df_new =pd.DataFrame(new_data_2d,index=bereik(2),kolommen=index)
print("\nDataFrame met een nieuwe Layer3:")
afdrukken(df_nieuw)
```
3. Een woordenboek van DataFrames gebruiken:
Dit is minder efficiënt dan een MultiIndex, maar biedt meer flexibiliteit voor complexe scenario's.
```python
gegevens ={}
voor i binnen bereik(2):
data[i] =pd.DataFrame(np.random.rand(3, 4))
Toegang tot gegevens:
afdrukken(gegevens[0])
```
De juiste aanpak kiezen:
* MultiIndex: Het beste voor de meeste gevallen, biedt goede prestaties en efficiënte gegevenstoegang als uw derde dimensie relatief klein tot middelgroot is.
* Woordenboek van dataframes: Het is beter als u een aanzienlijk groter aantal "lagen" in uw 3D-gegevens heeft of als uw verschillende lagen zeer verschillende structuren hebben.
Vergeet niet zorgvuldig te overwegen hoe u toegang krijgt tot uw gegevens en deze kunt manipuleren zodra deze op een van deze manieren zijn gestructureerd. De MultiIndex-aanpak verdient over het algemeen de voorkeur vanwege de efficiëntie en de ingebouwde mogelijkheden van Pandas voor het werken met MultiIndexen. Voor zeer grote datasets kunt u overwegen om Dask of Vaex te gebruiken, die zijn ontworpen voor out-of-core berekeningen. |