DataFrame.drop(labels=None, *, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise') Series.drop(labels=None, *, index=None, level=None, inplace=False, errors='raise')
labels=None
- одиночная метка или список меток индекса или столбца, которые нужно удалить. Кортеж будет использоваться как отдельная метка и не будет рассматриваться как список.axis=0
- ось по которой удаляются метки (0 или index
) или столбцов (1 или columns
). Для Series.drop()
НЕ ИСПОЛЬЗУЕТСЯ.index=None
- одиночная метка или список меток индекса. Альтернатива указанию оси axis=0
.columns=None
- одиночная метка или список меток столбца. Альтернатива указанию оси axis=1
. Для Series.drop()
НЕ ИСПОЛЬЗУЕТСЯ.level=None
- для MultiIndex
- уровень, с которого будут удалены метки.inplace=False
- если значение равно False
, возвратит копию. В противном случае выполнит операцию на месте и вернет None
.errors='raise'
- Если передана строка 'ignore'
, то подавляется ошибка и удаляются только существующие метки.DataFrame.drop()
возвращает DataFrame
с удаленным указанным индексом или метками столбцов или None
, если inplace=True
.Series.drop()
возвращает Series
с удаленным указанным индексом или None
, если inplace=True
.Метод DataFrame.drop()
удаляет строки или столбцы, при указании имен меток labels
и соответствующей оси axis
или напрямую указав имена индексов index
или столбцов columns
. При использовании MultiIndex
метки на разных уровнях можно удалить, указав уровень level
.
Метод Series.drop()
удаляет элементы Series
на основе указания меток индекса labels
. При использовании MultiIndex
метки на разных уровнях можно удалить, указав уровень level
.
Оба метода могут поднять исключение
KeyError
- для
DataFrame
- если какая-либо из меток не найдена на выбранной оси.- для
Series
- если какая-либо из меток не найдена в индексе.
Метод .drop()
, тесно связан с переиндексацией (методом .reindex()
). Он удаляет набор меток с оси:
>>> import pandas as pd >>> import numpy as np df = pd.DataFrame( { "one": pd.Series(np.random.randn(3), index=["a", "b", "c"]), "two": pd.Series(np.random.randn(4), index=["a", "b", "c", "d"]), "three": pd.Series(np.random.randn(3), index=["b", "c", "d"]), } ) >>> df # one two three # a 0.187290 0.112780 NaN # b 0.070447 -0.411876 1.009604 # c -0.247133 -0.995807 -1.617450 # d NaN 0.482486 0.502233 >>> df.drop(["a", "d"], axis=0) # one two three # b 0.070447 -0.411876 1.009604 # c -0.247133 -0.995807 -1.617450 >>> df.drop(["one"], axis=1) # two three # a 0.112780 NaN # b -0.411876 1.009604 # c -0.995807 -1.617450 # d 0.482486 0.502233
Обратите внимание, что следующий код также работает, но немного менее очевидно/чисто:
>>> df.reindex(df.index.difference(["a", "d"])) # one two three # b 0.070447 -0.411876 1.009604 # c -0.247133 -0.995807 -1.617450
DataFrame.drop()
:>>> import pandas as pd >>> import numpy as np >>> df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D']) >>> df # A B C D # 0 0 1 2 3 # 1 4 5 6 7 # 2 8 9 10 11
Вариант 1: указываем аргументы - метки labels
и ось axis
>>> df.drop(['B', 'C'], axis='columns') # A D # 0 0 3 # 1 4 7 # 2 8 11
Вариант 2: или напрямую указывает столбцы в аргументе columns
>>> df.drop(columns=['B', 'C']) # A D # 0 0 3 # 1 4 7 # 2 8 11
Вариант 1: указываем аргумент - метки строк labels
, ось axis
по умолчанию равна 0, т.е. строка
>>> df.drop([0, 1]) # A B C D # 2 8 9 10 11
Вариант 2: или напрямую указывает метки строк в аргументе index
>>> df.drop(index=[0, 1]) # A B C D # 2 8 9 10 11
MultiIndex
столбцов и/или строк в DataFrame
# создаем `MultiIndex` midx = pd.MultiIndex(levels=[['llama', 'cow', 'falcon'], ['speed', 'weight', 'length']], codes=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]]) # создаем `DataFrame` на `MultiIndex` df = pd.DataFrame(index=midx, columns=['big', 'small'], data=[[45, 30], [200, 100], [1.5, 1], [30, 20], [250, 150], [1.5, 0.8], [320, 250], [1, 0.8], [0.3, 0.2]]) >>> df # big small # llama speed 45.0 30.0 # weight 200.0 100.0 # length 1.5 1.0 # cow speed 30.0 20.0 # weight 250.0 150.0 # length 1.5 0.8 # falcon speed 320.0 250.0 # weight 1.0 0.8 # length 0.3 0.2
Например, необходимо удалить определенную комбинацию индексов из MultiIndex
, т. е. удалим комбинацию индексов falcon
и weight
, которая удаляет только соответствующую строку.
>>> df.drop(index=('falcon', 'weight')) # big small # llama speed 45.0 30.0 # weight 200.0 100.0 # length 1.5 1.0 # cow speed 30.0 20.0 # weight 250.0 150.0 # length 1.5 0.8 # falcon speed 320.0 250.0 # length 0.3 0.2
Теперь удалим строки с индексом cow
и столбец small
:
>>> df.drop(index='cow', columns='small') # big # llama speed 45.0 # weight 200.0 # length 1.5 # falcon speed 320.0 # weight 1.0 # length 0.3
И наконец удалим строки с индексом length
, который находится на первом уровне:
>>> df.drop(index='length', level=1) # big small # llama speed 45.0 30.0 # weight 200.0 100.0 # cow speed 30.0 20.0 # weight 250.0 150.0 # falcon speed 320.0 250.0 # weight 1.0 0.8
Series.drop()
:>>> import pandas as pd >>> import numpy as np >>> s = pd.Series(data=np.arange(3), index=['A', 'B', 'C']) >>> s # A 0 # B 1 # C 2 # dtype: int64
Удаление индексных меток строк B
и C
>>> s.drop(labels=['B', 'C']) # A 0 # dtype: int64
MultiIndex
midx = pd.MultiIndex(levels=[['llama', 'cow', 'falcon'], ['speed', 'weight', 'length']], codes=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]]) s = pd.Series([45, 200, 1.2, 30, 250, 1.5, 320, 1, 0.3], index=midx) >>> s # llama speed 45.0 # weight 200.0 # length 1.2 # cow speed 30.0 # weight 250.0 # length 1.5 # falcon speed 320.0 # weight 1.0 # length 0.3 # dtype: float64
Удаление метки второго уровня в серии с MultiIndex
>>> s.drop(labels='weight', level=1) # llama speed 45.0 # length 1.2 # cow speed 30.0 # length 1.5 # falcon speed 320.0 # length 0.3 # dtype: float64