list,setを値として格納 - pandas
pandasはかしこいので、list
やset
でもDataFrame()に放り込んでやればそのまま値として格納できるのですよ。pandasはかしこいので。
score count interferes is_settled 226 6.616621 19 {140, 155} False 227 6.614398 166 {153} False 236 6.391588 30 {162} True 239 6.242415 33 {153} False 243 6.148038 45 {153, 179} False
※interferes
カラムがset
型
一応、「行儀の良い」データベースとしては、こういったのは正規化すべきである。検索速度も速くなるし。
- 正規化した例
score count interfere is_settled 226 6.616621 19 140 False 227 6.616621 19 155 False 228 6.614398 166 153 False 236 6.391588 30 162 True 239 6.242415 33 153 False 243 6.148038 45 153 False 244 6.148038 45 179 False
けど、そこまで頑張って綺麗に作るほどのデータでも無いような場合、手軽に使えるのはありがたい。
ある値を含む行を抽出
listやsetが入っている列について「ある値を含む行のみを抽出」したい場合、専用の関数は無い(と思う)
Series.apply()で、真偽値を返す関数を渡す。当然ながら、速度は遅い。手軽さ重視。
# interferesに153が入っている行のみ選択 sub_df = df[df['interferes'].apply(lambda r: 153 in r)] print(sub_df) # score count interferes is_settled # 227 6.614398 166 {153} False # 239 6.242415 33 {153} False # 243 6.148038 45 {153, 179} False
唐突だが、pythonのset型について検索するとき、「set」って単語が汎用的すぎて、set型とは関係なく「~~をセットする」という意味の記事ばかり出てきてしまうのは何とかならないだろうか。