pythonで動的にオブジェクトを作成する
目的
pythonで動的にオブジェクトを変えたい。
ユースケース
乱数を変えたランダムサンプリングデータを複数個作りたいときや、絞り込みを変えたデータを作成したいときなど。
execでのやり方
exec
を使うと文字列でコードを書けるので利用する。
# ランダムサンプリング for i in range(4): exec(f'data_sample{i} = data.sample(n=100)') # => data_sample1, data_sample2, data_sample3, data_sample4ができあがる # 絞り込みを変えたデータを作成 j_list = ['hoge', 'fuga', 'piyo'] for j in j_list: exec(f'df_{j} = df.query("type == '{j}'")') # => df_hoge, df_fuga, df_piyoができあがる
dictを使ったやり方
exec
はまぁ直感的だからわかりやすい。ただし、変数名が明示的ではなかったり、スコープがよくわからんことになるので他の方法で実現できる方法の方がベスト。
# ランダムサンプリング d = dict() for i in range(3): d[i] = df.sample(n=100) # => d[0]などでアクセス可能 # 絞り込みを変えたデータを作成 d2 = dict() j_list = ['hoge', 'fuga', 'piyo'] for j in j_list: d2[j] = df.query("type == '{j}'") # => d2['hoge']などでアクセス可能