Pandas stöder inte direkt 3D -dataframes. Den grundläggande strukturen för en PANDAS-dataframe är tvådimensionell (rader och kolumner). För att representera 3D -data måste du använda ett annat tillvägagångssätt, vanligtvis en av dessa:
1. Paneldata (avskrivna men konceptuellt relevanta):
Pandas brukade ha ett "panel" -objekt, men det är avskrivet. Det var i huvudsak en behållare för flera dataframes. Även om det inte är direkt användbart nu, hjälper det att förstå det konceptuella tillvägagångssättet:Föreställ dig varje dataframe som representerar en skiva längs en dimension.
2. Använda en enda dataframe med en multiIndex:
Detta är den mest effektiva och rekommenderade metoden. Du skapar en multiindex för dina kolumner för att representera den tredje dimensionen.
`` `python
Importera pandor som PD
Importera numpy som NP
Exempel 3D -data (2x3x4)
data_3d =np.random.rand (2, 3, 4)
Skapa en multiIndex för kolumnerna
matriser =[
['A', 'a', 'b', 'b', 'c', 'c'], # lager 1
['X', 'y', 'x', 'y', 'x', 'y'] # lager 2
]
tuples =lista (zip (*matriser)))
index =pd.multiindex.from_tuples (tuples, names =['Layer1', 'Layer2'])
omforma uppgifterna till en 2D -matris som är lämplig för en dataframe
data_2d =data_3d.reshape (2, 6)
Skapa dataframe med multiIndex
df =pd.dataframe (data_2d, index =intervall (2), kolumner =index)
tryck (df)
åtkomst till data:
utskrift ("\ naccesing element på lager1 ='a', lager2 ='x', rad 0:")
tryck (df.loc [0, ('a', 'x')])
åtkomst till en skiva:
utskrift ("\ nAccessing all data för lager1 ='a':")
tryck (df.loc [:, 'a'])
#Ange ett nytt lager (lager3):
#Behöver omstrukturera uppgifterna för detta
new_data_3d =np.random.rand (2,3,4,2) #Added a Dimension
new_data_2d =new_data_3d.reshape (2,12)
matriser =[
['A', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b'], # lager 1
['X', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y', 'x', 'y'] # lager 2
, ['Z1', 'z1', 'z1', 'z1', 'z1', 'z1', 'z1', 'z1', 'z1', 'z1', 'z1', 'z1'] # lager 3
]
tuples =lista (zip (*matriser)))
index =pd.multiindex.from_tuples (tuples, names =['Layer1', 'Layer2', 'Layer3'])
df_new =pd.dataframe (new_data_2d, index =intervall (2), kolumner =index)
tryck ("\ ndataframe med ett nytt lager3:")
tryck (df_new)
`` `
3. Använda en Dictionary of DataFrames:
Detta är mindre effektivt än en multiindex men erbjuder mer flexibilitet för komplexa scenarier.
`` `python
data ={}
för jag inom räckvidden (2):
Data [i] =pd.dataframe (np.random.rand (3, 4))
åtkomst till data:
Skriv ut (data [0])
`` `
Att välja rätt tillvägagångssätt:
* multiIndex: Bäst för de flesta fall erbjuder bra prestanda och effektiv datatillgång om din tredje dimension är relativt liten till måttlig.
* Dictionary of DataFrames: Bättre om du har ett betydligt större antal "lager" i dina 3D -data eller om dina olika lager har mycket olika strukturer.
Kom ihåg att noggrant överväga hur du kommer åt och manipulera dina data när de är strukturerade på ett av dessa sätt. Multiindex-metoden är i allmänhet att föredra på grund av dess effektivitet och de inbyggda kapaciteterna hos PANDAS för att arbeta med multiindexer. För mycket stora datasätt kan du överväga att använda DASK eller VAEX som är designade för beräkning utanför kärnan.