目次
概要
pandas
のSeries
のデータを絞り込む方法をメモしておきます。
Series
対して処理を行い、条件にマッチする場合はTrue
、マッチしなければFalse
をとなるようなSeries
やboolのリスト
に変換します。boolのリスト
をSeries
のインデックスとして渡すことで、True
となる部分のみ抽出します。
boolのリストを取得
pandas
のSeries
のデータからbool
のリストやSeriesを取得します。
ここでは例として以下のようなSeries
を利用します。
import pandas as pd ser = pd.Series(["晴れ", "雨", "くもり","晴れ時々くもり", "雨"]) print(ser)
0 晴れ 1 雨 2 くもり 3 晴れ時々くもり 4 雨 dtype: object
完全一致
完全一致する場合True
を返却するようにする場合は==
を利用します。
print(ser == "雨")
0 False 1 True 2 False 3 False 4 True dtype: bool
含まれる文字列(str.contains)
print(ser.str.contains("時々"))
0 False 1 False 2 False 3 True 4 False dtype: bool
指定文字で終わる(str.endswith)
print(ser.str.endswith("くもり"))
0 False 1 False 2 True 3 True 4 False dtype: bool
指定文字で始まる(str.startswith)
print(ser.str.startswith("晴れ"))
0 True 1 False 2 False 3 True 4 False dtype: bool
絞り込み
print(ser[ser == "雨"])
1 雨 4 雨 dtype: object
- 赤時の部分がboolのリストとなっているため、
True
の部分のみ抽出されます。
リスト内包表記にて
boolのリスト
であれば良いので、以下のようなリスト内包表記
でも同じ結果が得られます。
print(ser[[x == "雨" for x in ser]])
1 雨 4 雨 dtype: object
- 複雑な条件を組み立てるときは利用できそうですが、通常のケースではシンプルに書けるので、前者の方でよいかなと思います。