Διαγράψτε γραμμές και στήλες σε DataFrames χρησιμοποιώντας το Pandas Drop

1
Διαγράψτε γραμμές και στήλες σε DataFrames χρησιμοποιώντας το Pandas Drop

Στην αρχή κάθε ανάλυσης, τα δεδομένα πρέπει να καθαρίζονται, να οργανώνονται και να γίνονται τακτοποιημένος. Για κάθε Python Pandas DataFrame, υπάρχει σχεδόν πάντα η ανάγκη διαγραφής σειρών και στηλών για να έχετε τη σωστή επιλογή δεδομένων για τη συγκεκριμένη ανάλυση ή οπτικοποίηση. Η λειτουργία Pandas Drop είναι το κλειδί για την αφαίρεση γραμμών και στηλών.

Pandas Drop Cheatsheet

Η κατάργηση στηλών και γραμμών από το DataFrame δεν είναι πάντα τόσο διαισθητική όσο θα μπορούσε να είναι. είναι όλα σχετικά με το „Πτώση DataFrame“ εντολή. Η συνάρτηση απόθεσης επιτρέπει την αφαίρεση γραμμών και στηλών από το DataFrame σας και μόλις το χρησιμοποιήσετε μερικές φορές, δεν θα έχετε προβλήματα.

Η συνάρτηση απόθεσης pandas χρησιμοποιείται για τη διαγραφή γραμμών και στηλών από πλαίσια δεδομένων python panda.  Αυτή η εικόνα είναι ένα μάθημα cheat sheet για τη λειτουργία drop.
Η συνάρτηση „απόθεση“ του Pandas χρησιμοποιείται για τη διαγραφή στηλών ή γραμμών από ένα Pandas DataFrame.

Δείγμα DataFrame

Για αυτήν την ανάρτηση, χρησιμοποιούμε δεδομένα από το ΠΟΥ ιχνηλάτης COVIDλήψη την 1η Ιανουαρίου 2020 (δεδομένα εδώ). Εάν θέλετε να εργαστείτε με ενημερωμένα δεδομένα, αλλάξτε τη διεύθυνση URL πηγής για τη συνάρτηση read_csv στο σενάριο φόρτωσης σε αυτό.

import pandas as pd

# Read a sample dataset (COVID data as at 1st Jan 2020)
data = pd.read_csv(
    "https://shanebucket.s3-eu-west-1.amazonaws.com/downloads/who-covid-2020-01-01.csv.zip"
)
# If you'd like to get up-to-date data, use URL: https://covid19.who.int/WHO-COVID-19-global-table-data.csv
# Rename the columns into something a little easier to work with.
data.columns = [
    "name", 
    "region", 
    "cases", 
    "cases_per_million", 
    "cases_7_days", 
    "cases_24_hours", 
    "deaths", 
    "deaths_per_million", 
    "deaths_7_days", 
    "deaths_24_hours", 
    "transmission_type"
]
data.head()
Ένας πίνακας δειγμάτων δεδομένων για το σεμινάριο σχετικά με τη συνάρτηση απόθεσης pandas όπου δείχνουμε πώς να διαγράψετε στήλες και σειρές από πλαίσια δεδομένων στην python.
Δείγμα Pandas DataFrame δεδομένων COVID που λήφθηκαν από τον ΠΟΥ από την 1η Ιανουαρίου 2020.

Διαγράψτε ή αποθέστε στήλες DataFrame με το Pandas Drop

Διαγραφή στηλών με το όνομα

Διαγραφή στηλών με όνομα από DataFrames είναι εύκολο να επιτευχθεί χρησιμοποιώντας την εντολή drop. Υπάρχουν δύο μορφές σύνταξης της συνάρτησης πτώσης που πρέπει να γνωρίζετε, αλλά επιτυγχάνουν το ίδιο αποτέλεσμα:

Διαγραφή στήλης με πτώση panda και άξονα=1

Ο προεπιλεγμένος τρόπος για να χρησιμοποιήσετε το „drop“ για την αφαίρεση στηλών είναι να παρέχετε τα ονόματα των στηλών που θα διαγραφούν μαζί με τον καθορισμό της παραμέτρου „axis“ ως 1.

# Delete a single column from the DataFrame
data = data.drop(labels="deathes", axis=1)

# Delete multiple columns from the DataFrame
# Here - we provide a list to the drop() function
data = data.drop(labels=["deaths", "deaths_per_million"], axis=1)

# Note that the "labels" parameter is by default the first, so 
# the above lines can be written slightly more concisely:
data = data.drop("deaths", axis=1)
data = data.drop(["deaths", "deaths_per_million"], axis=1)

Διαγράψτε τη στήλη με τα panda να ρίχνουν την παράμετρο „στήλες“.

Πιθανώς ένας πιο διαισθητικός τρόπος για να αφαιρέσετε στήλες από τα DataFrames είναι να χρησιμοποιήσετε την κανονική συνάρτηση „απόθεση“ με την παράμετρο „στήλες“ που καθορίζει ένα όνομα μεμονωμένης στήλης ή μια λίστα στηλών.

# Delete a single named column from the DataFrame
data = data.drop(columns="cases")

# Delete multiple named columns from the DataFrame
data = data.drop(columns=["cases", "cases_per_million"])

Διαγραφή στηλών κατά αριθμό στήλης ή ευρετήριο

Η συνάρτηση πτώσης μπορεί να χρησιμοποιηθεί για τη διαγραφή στηλών ανά αριθμό ή θέση, ανακτώντας πρώτα το όνομα της στήλης για το .drop. Για να λάβετε το όνομα της στήλης, δώστε το ευρετήριο της στήλης στο Dataframe.columns αντικείμενο που είναι μια λίστα με όλα τα ονόματα στηλών. Στη συνέχεια, το όνομα περνά στη συνάρτηση πτώσης όπως παραπάνω.

# Delete a column by column number
# Delete column number 4 (index number 3 in data.columns)
data = data.drop(columns=data.columns[3])

ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτή η μέθοδος μπορεί να καταλήξει σε πολλαπλές στήλες που διαγράφονται εάν επαναληφθούν τα ονόματα των στηλών (δηλαδή έχετε δύο στήλες με το ίδιο όνομα με αυτήν στο ευρετήριο 3).

Όταν έχετε επαναλαμβανόμενα ονόματα στηλών, μια ασφαλής μέθοδος για την αφαίρεση στηλών είναι να χρησιμοποιήσετε τη μεθοδολογία επιλογής iloc στο DataFrame. Σε αυτήν την περίπτωση, προσπαθείτε να «επιλέξετε όλες τις σειρές και όλες τις στήλες εκτός τον αριθμό της στήλης που θέλετε να διαγράψετε».

Για να καταργήσετε στήλες χρησιμοποιώντας το iloc, πρέπει να δημιουργήσετε μια λίστα με τους δείκτες στηλών που θέλετε διατήρησηδηλαδή μια λίστα με όλους τους αριθμούς στηλών, μείον τους διαγραμμένους.

Για να δημιουργήσουμε αυτή τη λίστα, μπορούμε να χρησιμοποιήσουμε ένα Κατανόηση λίστας Python που επαναλαμβάνεται σε όλους τους πιθανούς αριθμούς στηλών (range(data.shape[1])) και στη συνέχεια χρησιμοποιεί ένα φίλτρο για να εξαιρέσει τα διαγραμμένα ευρετήρια στηλών (x not in [columns to delete]). Στη συνέχεια, η τελική διαγραφή χρησιμοποιεί ένα επιλογή iloc για να επιλέξετε όλες τις σειρές, αλλά μόνο τις στήλες που θα κρατήσετε (.iloc[:, [columns to keep]).

# Delete column numbers 1, 2 and 5 from the DataFrame
# Create a list of all column numbers to keep
columns_to_keep = [x for x in range(data.shape[1]) if x not in [1,2,5]]
# Delete columns by column number using iloc selection
data = data.iloc[:, columns_to_keep]
data.shape
--> (238, 8)

Διαγράψτε τις γραμμές DataFrame με το Pandas Drop

Υπάρχουν τρεις διαφορετικοί τρόποι για να διαγράψετε σειρές από ένα Pandas Dataframe. Κάθε μέθοδος είναι χρήσιμη ανάλογα με τον αριθμό των σειρών που διαγράφετε και τον τρόπο με τον οποίο προσδιορίζετε τις σειρές που πρέπει να καταργηθούν.

Διαγραφή σειρών με χρήση „απόθεσης“ (το καλύτερο για μικρό αριθμό σειρών)

Διαγραφή σειρών με βάση την τιμή του ευρετηρίου

Για να διαγράψετε σειρές από ένα DataFrame, η συνάρτηση drop παραπέμπει στις σειρές με βάση το „τιμές ευρετηρίου„. Συνήθως, αυτή είναι μια ακέραια τιμή ανά σειρά, η οποία αυξάνεται από το μηδέν όταν φορτώνετε για πρώτη φορά δεδομένα στα Panda. Μπορείτε να δείτε το ευρετήριο όταν εκτελείτε το „data.head()“ στην αριστερή πλευρά της προβολής πίνακα. Μπορείτε να αποκτήσετε απευθείας πρόσβαση στο αντικείμενο ευρετηρίου χρησιμοποιώντας το „data.index“ και τις τιμές μέσω του „data.index.values“.

Το Pandas drop μπορεί να χρησιμοποιηθεί για την κατάργηση σειρών από ένα πλαίσιο δεδομένων pandas χρησιμοποιώντας την τιμή ευρετηρίου για αυτήν τη σειρά.
Το ευρετήριο DataFrame εμφανίζεται στην αριστερή πλευρά του DataFrame κατά την προεπισκόπηση. Σε αυτό το παράδειγμα, χρησιμοποιείται ένα απλό ευρετήριο ακέραιου αριθμού, το οποίο είναι το προεπιλεγμένο μετά τη φόρτωση δεδομένων από ένα αρχείο CSV ή Excel σε ένα Pandas DataFrame.

Για να αφαιρέσετε μια συγκεκριμένη σειρά από το πλαίσιο δεδομένων – καθορίστε την τιμή ευρετηρίου της στο Πέφτουν τα πάντα λειτουργία.

# delete a single row by index value 0
data = data.drop(labels=0, axis=0)

# delete a few specified rows at index values 0, 15, 20.
# Note that the index values do not always align to row numbers.
data = data.drop(labels=[1,15,20], axis=0)

# delete a range of rows - index values 10-20
data = data.drop(labels=range(40, 45), axis=0)

# The labels parameter name can be omitted, and axis is 0 by default
# Shorter versions of the above:
data = data.drop(0)
data = data.drop([0, 15, 20])
data = data.drop(range(10,20))

Μπορεί να είναι χρήσιμο για την επιλογή και τη συγκέντρωση να έχουμε ένα πιο ουσιαστικό ευρετήριο. Για τα δείγματα δεδομένων μας, η στήλη „όνομα“ θα ήταν επίσης καλό ευρετήριο και θα διευκόλυνε την επιλογή σειρών χωρών για διαγραφή από τα δεδομένα.

# Set the index of the DataFrame to the country name
data_with_index = data.set_index("name")
data_with_index.head()
Η συνάρτηση απόθεσης pandas μπορεί να διαγράψει σειρές που βασίζονται σε αριθμούς ή δείκτες που βασίζονται σε κείμενο σε αντικείμενα πλαισίου δεδομένων python.
Οι δείκτες, από προεπιλογή, αυξάνουν ακέραιους αριθμούς κατά την πρώτη φόρτωση των δεδομένων. Εάν τα δεδομένα σας περιλαμβάνουν μια στήλη αναγνώρισης για κάθε σειρά, η χρήση της συνάρτησης Pandas DataFrame .set_index() σάς επιτρέπει να χρησιμοποιήσετε αυτήν τη στήλη ως ευρετήριο για επιλογή σειράς και εύκολη γραφική παράσταση.
# With the index, we can drop the rows for a single country with its name
data_with_index = data_with_index.drop("Ireland")

# Drop rows for multiple countries:
data_with_index = data_with_index.drop(["France", "Canada", "Spain"])

Διαγραφή σειρών με βάση τον αριθμό σειράς

Ωρες ώρες, το ευρετήριο DataFrame μπορεί να μην είναι σε αύξουσα σειρά. Για να διαγράψουμε μια σειρά με βάση τη θέση της στο DataFrame, δηλαδή «διαγραφή της δεύτερης σειράς», εξακολουθούμε να χρησιμοποιούμε το ευρετήριο του DataFrame, αλλά επιλέγουμε τη σειρά από το ευρετήριο απευθείας καθώς διαγράφουμε. Μπορούμε επίσης να χρησιμοποιήσουμε αυτές τις επιλογές ευρετηρίου για να διαγράψουμε πολλές σειρές ή να δημιουργήσουμε ευρετήριο από το κάτω μέρος του DataFrame χρησιμοποιώντας αρνητικούς αριθμούς. Για παράδειγμα:

# Delete the 2nd row in the DataFrame (note indices starting from 0)
data = data.drop(data.index[1])

# Delete some chosen rows by row numbers - 2nd, 10th, 30th:
data = data.drop(data.index[[1, 9, 29]])

# Delete the first 5 rows
data = data.drop(data.index[range(5)])

# Delete the last row in the DataFrame
data = data.drop(data.index[-1])

Διαγραφή σειρών με βάση μια τιμή στήλης χρησιμοποιώντας μια επιλογή (iloc/loc)

Η δεύτερη πιο κοινή απαίτηση για τη διαγραφή γραμμών από ένα DataFrame είναι η διαγραφή σειρών σε ομάδες, που ορίζονται από τιμές σε διάφορες στήλες. Ο καλύτερος τρόπος για να το πετύχετε αυτό είναι να «επιλέξετε» πραγματικά τα δεδομένα που θα θέλατε να διατηρήσετε. Η μέθοδος „απόθεση“ δεν είναι τόσο χρήσιμη εδώ, και αντ‘ αυτού, επιλέγουμε δεδομένα χρησιμοποιώντας το δείκτης „loc“. και καθορίζοντας τις επιθυμητές τιμές στις στήλες που χρησιμοποιούμε για την επιλογή.

Υπάρχει μια πλήρης ανάρτηση ιστολογίου για το Pandas DataFrame iloc και την επιλογή loc σε αυτό το ιστολόγιο, αλλά ένα βασικό παράδειγμα είναι εδώ:

# Check the initial shape of the DataFrame
data.shape
--> (238, 11)
# Delete rows where case numbers are zero
# This deletion is completed by "selecting" rows where case numbers are non zero
data = data.loc[data["cases"] != 0]
data.shape
--> (223, 11)
# Delete rows where there have been no cases in 24 hours AND no cases in 7 days
# Note that you must put each condition within parenthesis
data = data.loc[(data["deaths_7_days"] > 0) & (data["deaths_24_hours"] > 0)]
data.shape
--> (114, 11)

Σημείωση – εάν λάβετε το σφάλμα Pandas: ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()τότε πιθανότατα έχετε αφήσει έξω την παρένθεση „( )“ γύρω από κάθε συνθήκη της επιλογής τοποθεσίας σας.

Διαγραφή σειρών με περικοπή του DataFrame

Ένας τελευταίος τρόπος για να αφαιρέσετε σειρές από το DataFrame είναι να χρησιμοποιήσετε τον συμβολισμό „slice“ της Python. Ο συμβολισμός τομής συνοψίζεται καλά σε αυτήν την ανάρτηση StackOverflow:

data[start:stop]  # items start through stop-1
data[start:]      # items start through the rest of the DataFrame
data[:stop]       # items from the beginning through stop-1
data[:]           # a copy of the whole DataFrame

Η σημείωση slice διευκολύνει τη διαγραφή πολλών σειρών από ένα DataFrame, διατηρώντας παράλληλα το επιλεγμένο „slice“. Για παράδειγμα:

# Start with a new dataset again
data.shape
--> (238, 11)
data = data[:100]   # Delete everything but the first 99 rows.
data.shape
--> (100, 11)
data = data[10:20]
data.shape
--> (10, 11)

Απόθεση „inplace“ ή επιστροφή νέου DataFrame

Η συνάρτηση πτώσης μπορεί να χρησιμοποιηθεί για την άμεση αλλαγή ενός Pandas DataFrame με το οποίο εργάζεστε ή, εναλλακτικά, για την επιστροφή του αποτελέσματος μετά την απόρριψη στηλών ή σειρών. Αυτή η συμπεριφορά ελέγχεται με την παράμετρο „inplace“. Η χρήση του inplace=True μπορεί να μειώσει τον αριθμό των εντολών εκ νέου ανάθεσης που θα χρειαστείτε στην εφαρμογή ή το σενάριο σας. Σημειώστε ότι εάν το inplace οριστεί ως True, δεν υπάρχει τιμή επιστροφής από τη συνάρτηση πτώσης.

# Start by looking at our original data. 
# DataFrame "shape" gives us a tuple with (number rows, number columns)

data.shape
--> (238, 11)

# We can delete a column using the drop command, with axis=1.
new_data = data.drop("name", axis=1)

# The new_data that is produced as only 10 columns ("name" is removed)
new_data.shape
--> (238, 10)

# The original data is left untouched at this point:
data.shape
--> (238, 11)

# Using "inplace", we can alter the original data in a single line:
data.drop("name", axis=1, inplace=True)
# Now "name" has been removed from the original data:
data.shape
--> (238, 10)

Περαιτέρω ανάγνωση και σύνδεσμοι

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

Schreibe einen Kommentar