Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Πώς να γεμίσετε NaN σε ένα πλαίσιο δεδομένων Pandas

Οι τιμές που λείπουν είναι συχνές και προκύπτουν είτε λόγω ανθρώπινου λάθους, σφάλματος οργάνου, επεξεργασίας από άλλη ομάδα ή αλλιώς απλώς έλλειψης δεδομένων για μια συγκεκριμένη παρατήρηση.

Σε αυτό το Byte, θα ρίξουμε μια ματιά στον τρόπο συμπλήρωσης NaNs σε ένα DataFrame, εάν επιλέξετε να χειριστείτε NaN συμπληρώνοντάς τα.

Αρχικά, ας δημιουργήσουμε μια κοροϊδία DataFrame με κάποιες τυχαίες τιμές που απορρίφθηκαν:

import numpy as np
array = np.random.randn(25, 3)
mask = np.random.choice([1, 0], array.shape, p=[.3, .7]).astype(bool)
array[mask] = np.nan

df = pd.DataFrame(array, columns=['Col1', 'Col2', 'Col3'])
        Col1      Col2      Col3 
0  -0.671603 -0.792415  0.783922
1   0.207720       NaN  0.996131
2  -0.892115 -1.282333       NaN
3  -0.315598 -2.371529 -1.959646
4        NaN       NaN -0.584636
5   0.314736 -0.692732 -0.303951
6   0.355121       NaN       NaN
7        NaN -1.900148  1.230828
8  -1.795468  0.490953       NaN
9  -0.678491 -0.087815       NaN
10  0.755714  0.550589 -0.702019
11  0.951908 -0.529933  0.344544
12       NaN  0.075340 -0.187669
13       NaN  0.314342 -0.936066
14       NaN  1.293355  0.098964

Ας σχεδιάσουμε, ας πούμε, την τρίτη στήλη:

plt.plot(df['Col3'])

Όταν γεμίζεται με διάφορες τεχνικές – αυτό το γεμάτο NaN γράφημα μπορεί να αντικατασταθεί με:

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

fillna() – Μέσος όρος, Διάμεσος, Λειτουργία

Μπορείτε να συμπληρώσετε αυτές τις τιμές σε μια νέα στήλη και να την αντιστοιχίσετε στη στήλη που θέλετε να συμπληρώσετε ή επιτόπου χρησιμοποιώντας το inplace διαφωνία. Εδώ, θα εξαγάγουμε τις συμπληρωμένες τιμές σε μια νέα στήλη για ευκολία στον έλεγχο:

mean = df['Col3'].fillna(df['Col3'].mean(), inplace=False)
median = df['Col3'].fillna(df['Col3'].median(), inplace=False)
mode = df['Col3'].fillna(df['Col3'].mode(), inplace=False)

Η διάμεσος, ο μέσος όρος και ο τρόπος λειτουργίας της στήλης είναι -0.187669, -0.110873 και 0.000000 και αυτές οι τιμές θα χρησιμοποιηθούν για κάθε NaN αντίστοιχα. Αυτό ουσιαστικά γεμίζει με σταθερές τιμές, όπου η τιμή που εισάγεται εξαρτάται από την ολότητα της στήλης.

Πρώτον, η συμπλήρωση με διάμεσες τιμές έχει ως αποτέλεσμα:

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Με μέσες τιμές:

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Με τιμές λειτουργίας:

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

fillna() – Σταθερή τιμή

Μπορείτε επίσης να συμπληρώσετε με μια σταθερή τιμή αντί:

Ρίξτε μια ματιά στον πρακτικό μας οδηγό για την εκμάθηση του Git, με βέλτιστες πρακτικές, πρότυπα αποδεκτά από τον κλάδο και συμπεριλαμβανόμενο φύλλο εξαπάτησης. Σταματήστε τις εντολές του Git στο Google και πραγματικά μαθαίνουν το!

constant = df['Col3'].fillna(0, inplace=False

Αυτό έχει ως αποτέλεσμα να τοποθετείται μια σταθερή τιμή (0) αντί για κάθε NaN. 0 είναι κοντά στη διάμεσο και μέση και ίση με τη λειτουργία, επομένως οι συμπληρωμένες τιμές θα μοιάζουν πολύ με αυτήν τη μέθοδο για το εικονικό μας σύνολο δεδομένων:

0     0.783922
1     0.996131
2     0.000000
3    -1.959646
4    -0.584636
5    -0.303951
6     0.000000
7     1.230828
8     0.000000
9     0.000000
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

fillna() – Γέμισμα προς τα εμπρός και προς τα πίσω

Σε κάθε σειρά – μπορείτε να κάνετε ένα γέμισμα προς τα εμπρός ή προς τα πίσω, λαμβάνοντας την τιμή είτε από τη σειρά πριν είτε μετά:

ffill = df['Col3'].fillna(method='ffill')
bfill = df['Col3'].fillna(method='bfill')

Με τη συμπλήρωση προς τα εμπρός, αφού λείπουμε από τη σειρά 2 – η τιμή από τη σειρά 1 λαμβάνεται για να συμπληρωθεί η δεύτερη. Οι τιμές διαδίδονται προς τα εμπρός:

0     0.783922
1     0.996131
2     0.996131
3    -1.959646
4    -0.584636
5    -0.303951
6    -0.303951
7     1.230828
8     1.230828
9     1.230828
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Με το γέμισμα προς τα πίσω, συμβαίνει το αντίθετο. Η σειρά 2 συμπληρώνεται με την τιμή από τη σειρά 3:

0     0.783922
1     0.996131
2    -1.959646
3    -1.959646
4    -0.584636
5    -0.303951
6     1.230828
7     1.230828
8    -0.702019
9    -0.702019
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Ωστόσο, αν υπάρχουν περισσότερα από ένα NaN σε μια ακολουθία – αυτά δεν θα πάνε καλά και μπορούν να καταρρεύσουν τα NaN πιο κάτω, παραμορφώνοντας τα δεδομένα και αφαιρώντας τις πραγματικά καταγεγραμμένες τιμές.

παρεμβάλλω()

Η interpolate() Η μέθοδος αναθέτει την παρεμβολή τιμών σε SciPy's σειρά μεθόδων για παρεμβολή τιμών. Αποδέχεται μια μεγάλη ποικιλία επιχειρημάτων, όπως: nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicsplineΚ.λπ.

Η παρεμβολή είναι πολύ πιο ευέλικτη και «έξυπνη» από την απλή πλήρωση τιμών με σταθερές ή μισές μεταβλητές όπως οι προηγούμενες μέθοδοι.

Η παρεμβολή μπορεί να γεμίσει σωστά μια ακολουθία με τρόπο που καμία άλλη μέθοδος δεν μπορεί, όπως:

s = pd.Series([0, 1, np.nan, np.nan, np.nan, 5])
s.fillna(s.mean()).values

s.fillna(method='ffill').values

s.interpolate().values

Η προεπιλεγμένη παρεμβολή είναι γραμμική και υποθέτοντας ότι 1...5 είναι πιθανό α 1, 2, 3, 4, 5 Η ακολουθία δεν είναι τραβηγμένη (αλλά δεν είναι εγγυημένη). Τόσο το συνεχές γέμισμα όσο και το γέμισμα προς τα εμπρός ή προς τα πίσω αποτυγχάνουν παταγωδώς εδώ. Σε γενικές γραμμές - η παρεμβολή θα είναι συνήθως ένας καλός φίλος όταν πρόκειται να γεμίσει NaN σε θορυβώδη σήματα ή κατεστραμμένα σύνολα δεδομένων.

Ο πειραματισμός με τύπους παρεμβολής μπορεί να αποφέρει καλύτερα αποτελέσματα.

Εδώ είναι δύο μέθοδοι παρεμβολής (splice και polynomial απαιτούν ένα order διαφωνία):

nearest = df['Col3'].interpolate(method='nearest')
polynomial = df['Col3'].interpolate(method='polynomial', order=3)

Αυτά έχουν ως αποτέλεσμα:

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Και:

Πώς να γεμίσετε NaN σε ένα Pandas DataFrame PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse