Pandasには、特定の列や行を削除することのできるdrop関数が存在します。

drop関数の他にもdel文を使った削除も可能なのでそれも合わせて紹介します。

本記事ではそのdrop関数の使い方について解説していきます。

drop関数

APIドキュメント

drop関数のAPIドキュメントは以下の通りです。

pandas.DataFrame.drop(labels=None,axis=0,index=None,columns=None,level=None,inplace=False,errors=’raise’)

params:

パラメータ名 概要
labels ラベル名またはラベル名のリスト (省略可能)初期値None
消去したい列データor行データのラベルを指定します。
axis 0または’index’
1または’columns’
(省略可能)初期値0
行データ(0または’index’)を削除するか列データ(1または’columns’)を削除するかを指定します。
index,columns ラベル名またはラベル名のリスト (省略可能)初期値None
省略したいラベル名を行データ(index)、列データ(columns)で個別に指定します。
level intもしくは階層名 (省略可能)初期値None
マルチインデックスのとき、ラベルを指定する階層を指定します。
inplace bool値 (省略可能)初期値False
Trueにすると返り値がなくなり、元のデータに変更が反映されます。
errors ‘ignore’または’raise’ (省略可能)初期値’raise’
‘ignore’にすると、エラーを無視し、存在するラベルのデータのみを削除します。

returns:

列データや行データが削除されたDataFrameが返されます。

行データを削除する

axisのデフォルトの設定で行データを削除するようになっているので、インデックスラベルを指定するだけで削除可能です。

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'A':[0,1,2,3,4,5],
   ...:                    'B':[6,7,8,9,10,11],
   ...:                    'C':[12,13,14,15,16,17]})
   ...:                    

In [3]: df
Out[3]:
   A   B   C
0  0   6  12
1  1   7  13
2  2   8  14
3  3   9  15
4  4  10  16
5  5  11  17

In [4]: df.drop(0) # 0番目のデータを削除
Out[4]:
   A   B   C
1  1   7  13
2  2   8  14
3  3   9  15
4  4  10  16
5  5  11  17

In [5]: df.drop([1,2]) # リスト形式で複数
Out[5]:
   A   B   C
0  0   6  12
3  3   9  15
4  4  10  16
5  5  11  17

インデックスラベルが数値以外でも削除可能です。

In [6]: df.index=['a','b','c','d','e','f'] # アルファベットにラベルを置き換える

In [7]: df
Out[7]:
   A   B   C
a  0   6  12
b  1   7  13
c  2   8  14
d  3   9  15
e  4  10  16
f  5  11  17

In [8]: df.drop('d')
Out[8]:
   A   B   C
a  0   6  12
b  1   7  13
c  2   8  14
e  4  10  16
f  5  11  17

index引数に直接指定すれば確実です。


In [9]: df.drop(index='d')
Out[9]:
   A   B   C
a  0   6  12
b  1   7  13
c  2   8  14
e  4  10  16
f  5  11  17

In [10]: df.drop(index=['c','f']) # もちろん複数行削除できる
Out[10]:
   A   B   C
a  0   6  12
b  1   7  13
d  3   9  15
e  4  10  16

列データを削除

次は列データを削除してみます。 axis=1またはaxis='columns'と設定してラベルを指定すれば削除可能です。

In [11]: df
Out[11]:
   A   B   C
a  0   6  12
b  1   7  13
c  2   8  14
d  3   9  15
e  4  10  16
f  5  11  17

In [12]: df.drop('A',axis=1) # axis='columns'でも可
Out[12]:
    B   C
a   6  12
b   7  13
c   8  14
d   9  15
e  10  16
f  11  17

In [13]: df.drop(['A','C'],axis='columns') # 複数列削除することも可能
Out[13]:
    B
a   6
b   7
c   8
d   9
e  10
f  11


columns引数に直接指定します。

In [14]: df.drop(columns='A')
Out[14]:
    B   C
a   6  12
b   7  13
c   8  14
d   9  15
e  10  16
f  11  17

In [15]: df.drop(columns=['A','C'])
Out[15]:
    B
a   6
b   7
c   8
d   9
e  10
f  11

行と列を同時に削除する

index引数とcolumns引数を同時に指定してあげれば行と列を同時に削除することが可能です。

例えば’a’行の’B’列を削除したい時はindex='a',columns='B'と指定します。

In [16]: df
Out[16]:
   A   B   C
a  0   6  12
b  1   7  13
c  2   8  14
d  3   9  15
e  4  10  16
f  5  11  17

In [17]: df.drop(index='a',columns='B')
Out[17]:
   A   C
b  1  13
c  2  14
d  3  15
e  4  16
f  5  17

複数行、複数列ずつ削除してみます。

In [18]: df.drop(index=['d','f'],columns=['A','C'])
Out[18]:
    B
a   6
b   7
c   8
e  10

変更を元のデータに反映させる

inplace=Trueにすれば元のデータに変更が反映されます。その代わり、関数の返り値がなくなります。

In [19]: df_2 = df.copy() # コピーを作成

In [20]: df_2
Out[20]:
   A   B   C
a  0   6  12
b  1   7  13
c  2   8  14
d  3   9  15
e  4  10  16
f  5  11  17

In [21]: df_2.drop('a',inplace=True) # 返り値なし

In [22]: df_2 # 変更が反映されている
Out[22]:
   A   B   C
b  1   7  13
c  2   8  14
d  3   9  15
e  4  10  16
f  5  11  17

del文を使った列データの削除

Pythonのdel文を利用することもできます。

In [27]: df
Out[27]:
   A   B   C
a  0   6  12
b  1   7  13
c  2   8  14
d  3   9  15
e  4  10  16
f  5  11  17

In [28]: del df['A']

In [29]: df
Out[29]:
    B   C
a   6  12
b   7  13
c   8  14
d   9  15
e  10  16
f  11  17

参考