Υλικό υπολογιστών

Γνώση Υπολογιστών >> Υλικό υπολογιστών >  >> Υπερυπολογιστές

Πώς μπορώ να δημιουργήσω και να χειριστώ αποτελεσματικά ένα πλαίσιο δεδομένων Pandas 3D;

Το Pandas δεν υποστηρίζει άμεσα 3D DataFrames. Η θεμελιώδης δομή ενός πλαισίου δεδομένων Pandas είναι 2-διαστάσεων (σειρές και στήλες). Για να αντιπροσωπεύετε δεδομένα 3D, πρέπει να χρησιμοποιήσετε μια διαφορετική προσέγγιση, συνήθως ένα από αυτά:

1. Δεδομένα πάνελ (απογοητευμένα αλλά εννοιολογικά συναφή):

Ο Pandas χρησιμοποιούσε ένα αντικείμενο "panel`, αλλά είναι καταργημένο. Ήταν ουσιαστικά ένα δοχείο για πολλαπλά πλαίσια δεδομένων. Παρόλο που δεν είναι άμεσα χρησιμοποιήσιμο τώρα, βοηθά στην κατανόηση της εννοιολογικής προσέγγισης:φανταστείτε κάθε πλαίσιο δεδομένων που αντιπροσωπεύει μια φέτα κατά μήκος μιας διάστασης.

2. Χρησιμοποιώντας ένα ενιαίο πλαίσιο δεδομένων με ένα Multiindex:

Αυτή είναι η πιο αποτελεσματική και συνιστώμενη μέθοδος. Δημιουργείτε ένα multiindex για τις στήλες σας για να αντιπροσωπεύετε την τρίτη διάσταση.

`` `Python

Εισαγωγή pandas ως PD

Εισαγωγή Numpy ως NP

Δεδομένα 3D δεδομένων (2x3x4)

data_3d =np.random.rand (2, 3, 4)

Δημιουργήστε ένα multiindex για τις στήλες

arrays =[

['A', 'a', 'b', 'b', 'c', 'c'], # layer 1

['X', 'y', 'x', 'y', 'x', 'y'] # layer 2

]

FUPLES =LIST (ZIP (*Arrays))

index =pd.multiindex.from_tuples (πλειάδες, ονόματα =['layer1', 'layer2']))

Αναμορφώστε τα δεδομένα σε μια συστοιχία 2D κατάλληλη για ένα πλαίσιο δεδομένων

data_2d =data_3d.reshape (2, 6)

Δημιουργήστε το πλαίσιο δεδομένων με το MultiIndex

df =pd.dataFrame (data_2d, index =εύρος (2), στήλες =δείκτης)

εκτύπωση (DF)

Πρόσβαση σε δεδομένα:

εκτύπωση ("\ naccessing στοιχείο στο layer1 ='a', layer2 ='x', σειρά 0:")

εκτύπωση (df.loc [0, ('a', 'x')]))

Πρόσβαση σε μια φέτα:

εκτύπωση ("\ naccessing όλα τα δεδομένα για το layer1 ='a':")

εκτύπωση (df.loc [:, 'a'])

#Προσθέστε ένα νέο στρώμα (Layer3):

#Δεν πρέπει να αναδιαρθρώσετε τα δεδομένα για αυτό

new_data_3d =np.random.rand (2,3,4,2) #προσθέτουν μια διάσταση

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

]

FUPLES =LIST (ZIP (*Arrays))

index =pd.multiindex.from_tuples (πλειάδες, ονόματα =['layer1', 'layer2', 'layer3']))

df_new =pd.dataFrame (new_data_2d, index =εύρος (2), στήλες =δείκτης)

εκτύπωση ("\ ndataFrame με ένα νέο layer3:")

εκτύπωση (df_new)

`` `

3. Χρησιμοποιώντας ένα λεξικό DataFrames:

Αυτό είναι λιγότερο αποτελεσματικό από ένα multiindex, αλλά προσφέρει μεγαλύτερη ευελιξία για σύνθετα σενάρια.

`` `Python

δεδομένα ={}

για το I στην περιοχή (2):

δεδομένα [i] =pd.dataframe (np.random.rand (3, 4))

Πρόσβαση σε δεδομένα:

εκτύπωση (δεδομένα [0])

`` `

Επιλογή της σωστής προσέγγισης:

* multiindex: Το καλύτερο για τις περισσότερες περιπτώσεις, προσφέρει καλή απόδοση και αποτελεσματική πρόσβαση δεδομένων εάν η τρίτη διάσταση σας είναι σχετικά μικρή έως μέτρια.

* Λεξικό DataFrames: Καλύτερα εάν έχετε σημαντικά μεγαλύτερο αριθμό "στρωμάτων" στα δεδομένα 3D ή εάν τα διαφορετικά σας στρώματα έχουν πολύ διαφορετικές δομές.

Θυμηθείτε να εξετάσετε προσεκτικά πώς θα έχετε πρόσβαση και χειριστείτε τα δεδομένα σας μόλις είναι δομημένο με έναν από αυτούς τους τρόπους. Η προσέγγιση Multiindex είναι γενικά προτιμότερη λόγω της αποτελεσματικότητάς της και των ενσωματωμένων δυνατοτήτων της PANDAS για συνεργασία με πολλαπλές δείκτες. Για πολύ μεγάλα σύνολα δεδομένων, σκεφτείτε τη χρήση Dask ή VAEX που έχουν σχεδιαστεί για υπολογισμό εκτός πυρήνων.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα