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