Pandas unterstützt nicht direkt 3D -Datenrahmen. Die grundlegende Struktur eines Pandas-Datenframees ist zweidimensional (Zeilen und Spalten). Um 3D -Daten darzustellen, müssen Sie einen anderen Ansatz verwenden, normalerweise einen davon:
1. Paneldaten (veraltet, aber konzeptionell relevant):
Pandas hatte früher ein "Panel" -Objekt, aber es ist veraltet. Es war im Wesentlichen ein Container für mehrere Datenrahmen. Obwohl es jetzt nicht direkt verwendbar ist, hilft es, den konzeptionellen Ansatz zu verstehen:Stellen Sie sich jeden Datenrahmen vor, der eine Scheibe entlang einer Dimension darstellt.
2. Verwenden eines einzelnen Datenframs mit einem MultiIndex:
Dies ist die effizienteste und empfohlene Methode. Sie erstellen einen Multiindex für Ihre Spalten, um die dritte Dimension darzustellen.
`` `Python
Pandas als PD importieren
Numph als NP importieren
Beispiel 3D -Daten (2x3x4)
data_3d =np.random.rand (2, 3, 4)
Erstellen Sie einen MultiIndex für die Spalten
Arrays =[
['A', 'a', 'b', 'b', 'c', 'c'], # Layer 1
['X', 'y', 'x', 'y', 'x', 'y'] # Layer 2
]
tupel =list (ZIP (*Arrays))
index =pd.multiIndex.from_tupel (tupel, names =['Layer1', 'Layer2'])
Umformeln Sie die Daten in ein 2D -Array, das für einen Datenrahmen
geeignet ist
data_2d =data_3d.reshape (2, 6)
Erstellen Sie den Datenrahmen mit dem MultiIndex
df =pd.dataframe (data_2d, index =Bereich (2), Spalten =Index)
Druck (df)
Zugriff auf Daten:
print ("\ nAccesssing Element bei Layer1 ='a', Layer2 ='x', Zeile 0:")
print (df.loc [0, ('a', 'x')]))
Zugriff auf eine Scheibe:
print ("\ ncounting alle Daten für Layer1 ='a':")
print (df.loc [:, 'a'])
#Eine neue Schicht (Layer3):
#Nieren Sie die Daten dafür umzustrukturieren
new_data_3d =np.random.rand (2,3,4,2) #eine Dimension veranlasst
new_data_2d =new_data_3d.reshape (2,12)
Arrays =[
['A', 'a', 'a', 'a', 'a', 'a', 'B', 'B', 'B', 'B', 'B', 'B'], # Layer 1
['X', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y'] # Layer 2
, ['Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1', 'Z1'] # Layer 3
]
tupel =list (ZIP (*Arrays))
Index =pd.multiIndex.from_tupel (tupel, names =['Layer1', 'Layer2', 'Layer3'])
df_new =pd.dataframe (new_data_2d, Index =Bereich (2), Spalten =Index)
print ("\ ndataframe mit einer neuen Ebene3:")
print (df_new)
`` `
3. Unter Verwendung eines Wörterbuchs mit Datenrahmen:
Dies ist weniger effizient als ein Multiindex, bietet jedoch mehr Flexibilität für komplexe Szenarien.
`` `Python
Data ={}
für i im Bereich (2):
Daten [i] =pd.dataframe (np.random.rand (3, 4))
Zugriff auf Daten:
drucken (Daten [0])
`` `
den richtigen Ansatz auswählen:
* MultiIndex: Das Beste für die meisten Fälle bietet eine gute Leistung und einen effizienten Datenzugriff, wenn Ihre dritte Dimension relativ klein bis moderat ist.
* Wörterbuch von Datenrahmen: Besser, wenn Sie eine deutlich größere Anzahl von "Ebenen" in Ihren 3D -Daten haben oder wenn Ihre unterschiedlichen Schichten sehr unterschiedliche Strukturen haben.
Denken Sie daran, sorgfältig zu überlegen, wie Sie auf Ihre Daten zugreifen und manipulieren, sobald sie auf eine dieser Arten strukturiert sind. Der Multiindex-Ansatz ist aufgrund seiner Effizienz und der integrierten Fähigkeiten von Pandas für die Arbeit mit Multiindexen im Allgemeinen vorzuziehen. Überlegen Sie sich für sehr große Datensätze mit Dask oder VAEX, die für die Rechenaufwand für außerhalb des Kerns ausgelegt sind.