PythonのPandasで範囲指定して行削除をする方法

Python,イメージ

AI実装検定のご案内

PythonのPandasで「範囲指定して行を削除する」方法にはいくつかのアプローチがあります。

どの方法を使うかは、「範囲」とは何を意味するかによって異なります。

以下では、それぞれのケースについて丁寧に解説していきます。

目次

想定される「範囲指定」とは?

  • インデックスでの範囲指定(行番号ベース)
  • 列の値での範囲指定(値ベース)
  • 日時やカテゴリでの範囲指定(条件ベース)

それぞれについて、具体例付きで説明します。

インデックスで範囲指定して行削除

たとえば、DataFrameの2行目から4行目までを削除したい場合

import pandas as pd

# サンプルデータ
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [24, 27, 22, 32, 29]
})

# インデックス2から4未満(2,3)の行を削除
df_dropped = df.drop(df.index[2:4])

print(df_dropped)

解説

  • df.index[2:4] でインデックスのスライスを取得
  • .drop(...) で該当のインデックス行を削除
  • 元の df は変更されず、新しい df_dropped が生成されます

列の値に基づいて範囲指定し行削除

たとえば、Ageが25歳以上30歳未満の人を削除したい場合

# 条件を指定
condition = (df['Age'] >= 25) & (df['Age'] < 30)

# 条件に合致する行を削除
df_filtered = df[~condition]  # ~ はNOT演算子

print(df_filtered)

解説

  • (df['Age'] >= 25) & (df['Age'] < 30):範囲条件を作成
  • ~condition:その条件に当てはまらない行を抽出
  • 結果として、該当する範囲の値を持つ行が削除されたDataFrameが得られます

日付で範囲指定して削除(タイムスタンプベース)

日時をインデックスにして、特定期間の行を削除したいとき

# 日付インデックスのDataFrameを作成
date_rng = pd.date_range(start='2024-01-01', end='2024-01-10', freq='D')
df = pd.DataFrame({'value': range(len(date_rng))}, index=date_rng)

# 2024-01-03〜2024-01-06 の範囲を削除
df_dropped = df.drop(df.loc['2024-01-03':'2024-01-06'].index)

print(df_dropped)

解説

  • df.loc['start':'end'] で日付の範囲を取得
  • その .indexdrop() に渡して行削除

特定のインデックスのリストで削除

手動で削除したいインデックスがある場合は、リストで指定できます。

# インデックス2番と4番を削除
df_dropped = df.drop([2, 4])
print(df_dropped)

inplace=True で元のDataFrameに反映

drop() は通常、新しいDataFrameを返すだけで、元のDataFrameには影響しません。

しかし、inplace=True を指定すると、元のDataFrame自体が直接更新されて、行が削除されます。

df.drop(df.index[1:3], inplace=True)
print(df)  # 変更が反映されている

まとめ

範囲指定の仕方使う方法使用例
行番号で指定df.drop(df.index[start:end])インデックス2〜4の行削除
値で範囲指定df[~条件]Ageが25〜30の行削除
日時で指定df.drop(df.loc[start:end].index)ある期間の行を削除
リスト指定df.drop([index1, index2])任意の行番号を削除

以上、PythonのPandasで範囲指定して行削除をする方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次