list,setを値として格納 - pandas

pandasはかしこいので、listsetでも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型とは関係なく「~~をセットする」という意味の記事ばかり出てきてしまうのは何とかならないだろうか。