pandas.DataFrameのdropメソッドをfor文を使って回したいのですが、動作しません

投稿者: Anonymous

単純に0から4番目の行を削除しようと考えています。

for i in range(5):
    df.drop(i)

このコードで動作すると思ったのですが、そのあとdfで確認しても変化なしなので参っています。
ネットであれこれ調べて試行錯誤したのですが、見当がつきません…
大変初歩的な質問で恐縮ですが、ご教示いただける方がいらっしゃいましたら幸いです。
どうぞよろしくお願いいたします。

解決

df.drop() メソッドは df を直接変更はせず行を削除した新たなデータフレームを返すメソッドです。

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([[i] for i in range(10)])

In [3]: df2 = df.drop(0)

In [4]: df
Out[4]:
   0
0  0  # 1行目が残っている: df に変更はない
1  1
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9

In [5]: df2
Out[5]:
   0
1  1  # df から 1 行目のみ除いたデータフレームになっている
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9

なので1行目から5行目を消すためには df を直接操作する(inplace=True と設定する)もしくは行の削除結果を変数に代入するべきだと思います。

for i in range(5):
    df.drop(i, inplace=True)
    # または df2 = df.drop(i)

ちなみにですが、今回のように5行目までをすべて削除するのであれば、 df2 = df.drop(range(5))for を使わずに削除することもできます。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *