Skip to content

pandas: Zeilen, Spalten aus DataFrame löschen mit drop()

Python

Verwenden Sie drop(), um Zeilen und Spalten aus pandas.DataFrame zu löschen.

Geben Sie vor Version 0.21.0 Zeile/Spalte mit Parameterbeschriftungen und Achse an. Index oder Spalten können ab 0.21.0 verwendet werden.

Dieser Artikel hat folgenden Inhalt.

  • Zeilen aus pandas.DataFrame löschen
    • Angeben nach Zeilenname (Zeilenbeschriftung)
    • Geben Sie nach Zeilennummer an
    • Hinweise, wenn der Index nicht gesetzt ist
  • Löschen Sie Spalten aus pandas.DataFrame
    • Angeben nach Spaltenname (Spaltenbezeichnung)
    • Geben Sie nach Spaltennummer an
  • Löschen Sie mehrere Zeilen und Spalten auf einmal

Siehe sterben following Artikel zum Entfernen fehlender Werte NaN und Zeilen mit doppelten Elementen.

Der Beispielcode verwendet sterben following Daten.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

CSV-Datei ist hier:

Zeilen aus pandas.DataFrame löschen

Angeben nach Zeilenname (Zeilenbeschriftung)

Angabe mit den ersten Parameterbeschriftungen und der zweiten Parameterachse. Setzen Sie im Fall von Zeilen Achse=0.

print(df.drop('Charlie', axis=0))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57

Der Standardwert ist Achse=0, also kann Achse weggelassen werden.

print(df.drop('Charlie'))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57

Ab Version 0.21.0 können Sie auch den Parameterindex verwenden.

print(df.drop(index='Charlie'))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57

Verwenden Sie eine Liste, um mehrere Zeilen gleichzeitig zu löschen.

print(df.drop(['Bob', 'Dave', 'Frank']))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

print(df.drop(index=['Bob', 'Dave', 'Frank']))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

Standardmäßig wird der ursprüngliche DataFrame nicht geändert, und ein neuer DataFrame wird zurückgegeben.

Durch Festlegen des Parameters inplace auf True wird der ursprüngliche DataFrame geändert. In diesem Fall wird kein neuer DataFrame zurückgegeben, und der Rückgabewert ist None.

df_org = df.copy()
df_org.drop(index=['Bob', 'Dave', 'Frank'], inplace=True)
print(df_org)
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

Geben Sie nach Zeilennummer an

Wenn SIE nach Zeilennummer angeben möchten, verwenden SIE das Indexattribut von DataFrame.

Geben SIE die Zeilennummer in [] des Indexattributs an, um den entsprechenden Zeilennamen zu erhalten. Über eine Liste können mehrere Zeilennummern angegeben werden.

print(df.index[[1, 3, 5]])
# Index(['Bob', 'Dave', 'Frank'], dtype="object", name="name")

Sie können dies als erste Parameterbeschriftung oder Index von drop() angeben.

print(df.drop(df.index[[1, 3, 5]]))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

print(df.drop(index=df.index[[1, 3, 5]]))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

Hinweise, wenn der Index nicht gesetzt ist

Wenn kein Zeilenname festgelegt ist, ist Index standardmäßig eine Folge von Ganzzahlen. Seien Sie vorsichtig, wenn Index eine Zahl und kein String ist.

df_noindex = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df_noindex)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

print(df_noindex.index)
# RangeIndex(start=0, stop=6, step=1)

Solange es sich um eine fortlaufende Nummer handelt, ist das Ergebnis dasselbe, unabhängig davon, ob SIE eine Nummer angeben oder das Indexattribut verwenden.

print(df_noindex.drop([1, 3, 5]))
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

print(df_noindex.drop(df_noindex.index[[1, 3, 5]]))
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

Das Ergebnis ist anders, wenn es durch Sortieren usw. in der falschen Reihenfolge ist. Bei der Angabe eines numerischen Werts WIRD die Zeile gelöscht, deren Label der numerischen Wert IST, und bei Verwendung des Indexattributs die Zeile, deren Nummer der numerischen Wert IST gelöscht.

df_noindex_sort = df_noindex.sort_values('state')
print(df_noindex_sort)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

print(df_noindex_sort.index)
# Int64Index([1, 2, 4, 0, 5, 3], dtype="int64")

print(df_noindex_sort.drop([1, 3, 5]))
#       name  age state  point
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64

print(df_noindex_sort.drop(df_noindex_sort.index[[1, 3, 5]]))
#     name  age state  point
# 1    Bob   42    CA     92
# 4  Ellen   24    CA     88
# 5  Frank   30    NY     57

Informationen zum Sortieren finden Sie im following Artikel.

Löschen Sie Spalten aus pandas.DataFrame

Angeben nach Spaltenname (Spaltenbezeichnung)

Angabe mit den ersten Parameterbeschriftungen und der zweiten Parameterachse. Setzen Sie im Fall von Zeilen Achse = 1.

print(df.drop('state', axis=1))
#          age  point
# name               
# Alice     24     64
# Bob       42     92
# Charlie   18     70
# Dave      68     70
# Ellen     24     88
# Frank     30     57

Ab Version 0.21.0 können SIE auch die Parameterspalten verwenden.

print(df.drop(columns='state'))
#          age  point
# name               
# Alice     24     64
# Bob       42     92
# Charlie   18     70
# Dave      68     70
# Ellen     24     88
# Frank     30     57

Verwenden Sie eine Liste, um mehrere Spalten gleichzeitig zu löschen.

print(df.drop(['state', 'point'], axis=1))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

print(df.drop(columns=['state', 'point']))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

Der Parameter inplace kann ebenso wie für Zeilen verwendet werden.

df_org = df.copy()
df_org.drop(columns=['state', 'point'], inplace=True)
print(df_org)
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

Geben Sie nach Spaltennummer an

Wenn SIE nach Spaltennummer angeben möchten, verwenden SIE das Spaltenattribut von DataFrame.

print(df.columns[[1, 2]])
# Index(['state', 'point'], dtype="object")

print(df.drop(df.columns[[1, 2]], axis=1))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

print(df.drop(columns=df.columns[[1, 2]]))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

Wenn der Wert von Spalten eine ganze Zahl ist, seien Sie wie oben für Zeilen vorsichtig beschrieben.

Löschen Sie mehrere Zeilen und Spalten auf einmal

Ab Version 0.21.0 und höher ist es möglich, mehrere Zeilen und Spalten gleichzeitig zu löschen, indem SIE den Parameterindex und die Spalten angeben.

Natürlich ist es auch möglich, durch Zeilennummer und Spaltennummer anzugeben oder den Parameter an Ort und Stelle anzugeben.

print(df.drop(index=['Bob', 'Dave', 'Frank'],
              columns=['state', 'point']))
#          age
# name        
# Alice     24
# Charlie   18
# Ellen     24

print(df.drop(index=df.index[[1, 3, 5]],
              columns=df.columns[[1, 2]]))
#          age
# name        
# Alice     24
# Charlie   18
# Ellen     24

df_org = df.copy()
df_org.drop(index=['Bob', 'Dave', 'Frank'],
            columns=['state', 'point'], inplace=True)
print(df_org)
#          age
# name        
# Alice     24
# Charlie   18
# Ellen     24