2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[python] pandasでqueryを用いた条件抽出

Last updated at Posted at 2022-10-01

はじめに

pandasで無数のデータを扱う場合、条件を満たす値だけを取り出す必要がある
例えば、一定の費用以上のプロジェクトだけを探したい時、一定期間の日付のリストを探したい時、などなど
ここではpandas でqueryを用いて必要な値を持つデータフレームに絞ることを紹介する

前回の記事
[python] 複雑なエクセルデータをpandasで処理する

環境

python 3.7.8
window 10

Code

import pandas as pd

df = pd.read_excel('./data.xlsx')
df

image.png

単一条件

一つの列にたいしての条件でデータを絞ることができる。

変数名で抽出

Name列がTanakaである

df.query("Name == 'Tanaka'")

image.png

Class列がBではない

df.query('Class != "B"')

image.png

変数の範囲で抽出

Point列が50より高い

df.query('Point > 50')

image.png

Point列が90である

df.query('Point == 90')

image.png

インデックスの範囲で抽出

インデックスが2以上である

df.query('index >= 2')

image.png

インデックスが偶数である

df.query('index%2 == 0')

image.png

複数条件

変数の条件で抽出

Point列が50以上 または Class列がBである

df.query('Point >= 50 or Class == "B"')

image.png

Point列が50以上 かつ Class列がBである

df.query('Point >= 50 and Class == "B"')

image.png

Point列が50以上 かつ 60より小さい値である

df.query(' 50 <= Point < 60')

image.png

リストの中の値を持つ条件

Class列に"A" 、"B"を含む

df.query('Class in ["A", "B"]')

image.png
Class列に90 、55を含む

df.query('Point in [90, 55]')

image.png

Class列に90、55を含まない

df.query('Point not in [90, 55]')

image.png

変数を使用した条件

変数の前に@につけて用いる

x = 90
df.query('Point == @x')

image.png

y = [50, 30]
df.query('Point in @y')

image.png

まとめ

pandas の queryを用いることによってデータフレームのほとんどは値を絞ることができる。
前回でも紹介したように、複雑なデータでもとりあえずデータフレームの行列の形にできてしまえば、条件付きでより洗練されたデータを得ることができる。

pandas.DataFrame.query公式ドキュメント

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?