Python | 同じ範囲検索を bisect と pandas で比較

Python
スポンサーリンク

「20〜40 の範囲の値を抽出する」という同じ課題を、標準ライブラリの bisect とデータ分析ライブラリの pandas で書き比べてみましょう。


bisect を使った場合(標準ライブラリ)

import bisect

data = [10, 15, 20, 25, 30, 35, 40, 45, 50]  # ソート済みリスト

lower, upper = 20, 40

# 範囲の開始位置と終了位置を取得
start = bisect.bisect_left(data, lower)
end = bisect.bisect_right(data, upper)

# 範囲抽出
subset = data[start:end]
print(subset)  # [20, 25, 30, 35, 40]
Python
  • 特徴: 軽量で高速。ソート済みリストから範囲を抜き出すだけなら最適。
  • 制約: リストがソート済みである必要がある。ラベルや複雑な条件は扱いにくい。

pandas を使った場合(DataFrame)

import pandas as pd

data = pd.DataFrame({"value": [10, 15, 20, 25, 30, 35, 40, 45, 50]})

# between を使って範囲抽出
subset = data[data["value"].between(20, 40)]
print(subset)
Python

実行結果

   value
2     20
3     25
4     30
5     35
6     40
  • 特徴: between で直感的に書ける。複数列や複雑条件も簡単に組み合わせ可能。
  • 制約: pandas をインポートする必要があり、小規模データではオーバーエンジニアリングになることも。

並べて比較

項目bisectpandas
コード量やや多い(インデックス計算+スライス)短く直感的(between
必要条件ソート済みリストDataFrame(表形式)
適用範囲単純な範囲検索複雑条件・複数列検索
データ規模小〜中規模中〜大規模
可読性Python標準でシンプルデータ分析に最適で読みやすい

まとめ

  • bisect: 軽量で高速。ソート済みリストから範囲を抜き出すだけなら最適。
  • pandas: 大規模データや複雑な条件検索に強い。ログ解析や時系列データ処理に便利。

👉 小規模・単純検索 → bisect
👉 大規模・複雑検索 → pandas

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました