Dataframeの行を条件指定で抽出
目次
特定の行を抽出
以下に示すデータを例に扱う。
import pandas as pd
df = pd.read_csv('./sample_data.csv')
print(df)
# name age city gender
# John 15 TX F
# Bob 25 NY M
# Alice 31 NY F
# Flank 77 CA F
# Robin 41 CA M
# Derik 65 NY M
区間を指定して抽出
区間を指定して該当する『行』を抽出する。
ここでは、1行目から3行目までの列を抽出する
df = pd.read_csv('./sample_data.csv')
print(df[1:3])
# name age city gender
# Bob 25 NY M
# Alice 31 NY F
比較演算子で条件指定して抽出
特定の区間を指定して抽出する。ここでは、gender==F
の行だけ抽出する。
print(df[df['gender'] == "F"])
# name age city gender
# John 15 TX F
# Alice 31 NY F
# Flank 77 CA F
query
メソッドを活用することで、文字列で指定することができる。
ここでは、ageが10以上30以下の行だけ抽出する。
print(df.query('10 < age < 30'))
# name age city gender
# John 15 TX F
# Bob 25 NY M
リストの要素に含まれているかを確認して抽出
特定の文字列が含まれている行のみを抽出する。
ここでは、stateにTXとCAが含まれている場合を抽出する。
print(df[df['city'].isin(['TX', 'CA'])])
print(df)
# name age city gender
# John 15 TX F
# Flank 77 CA F
# Robin 41 CA M
列に対する条件を指定する
列(行名)に指定をしたいときに活用する。
ここでは、3で割り切れるindex(つまり0行目と3行目)を抽出する。
print(df.query('index % 3 == 0'))
print(df)
# name age city gender
# John 15 TX F
# Flank 77 CA F
この技術を活用して、時系列データなどを間引くことができる。
以下に示す時系列データを半分にしたいときを想定する。
indexが2で割り切れる行だけを抽出することでデータ量を半減できる。
print(df)
# time count
#0 03/29/0:00 1
#1 03/29/1:00 2
#2 03/29/2:00 3
#3 03/29/3:00 4
#4 03/29/4:00 5
#5 03/29/5:00 6
#6 03/29/6:00 7
print(df.query('index % 2 == 0'))
# time count
#0 03/29/0:00 1
#2 03/29/2:00 3
#4 03/29/4:00 5
#6 03/29/6:00 7