本日はデータフレームのマージ(結合) について。
1 2 3 4 5 6 7 8 |
df1 = pd.DataFrame({"stock_code": ["1111", "2222", "3333"], "stock_rsi": ["21", "14", "20"]}) print(df1) df2 = pd.DataFrame({"stock_code": ["1111", "2222", "3333", "4444"], "dvidend_amout": ["210", "124", "2", "50"]}) print(df2) print(pd.merge(df1, df2)) |
これを実行するとこうなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
stock_code stock_rsi 0 1111 21 1 2222 14 2 3333 20 stock_code dvidend_amout 0 1111 210 1 2222 124 2 3333 2 3 4444 50 stock_code stock_rsi dvidend_amout 0 1111 21 210 1 2222 14 124 2 3333 20 2 |
pd.merge()関数は、2つのデータフレームの内、共通の列(今回はstock_code)を見つけると、それをキーにデータフレーム同士をマージします。ちなみに共通のキーがない行は削除されます。つまり、デフォルトでは内部結合になるんですね。もちろんオプションで外部結合することも可能です。
1 |
print(pd.merge(df1, df2, on="stock_code")) |
通常はこのようにキーとなる列を明示的に指定した方がよいでしょう。
ちなみにキーの列名が同じでも、型が異なる(この場合はintとstr)とマージできずにエラーになります。
1 2 3 4 5 6 7 8 |
df1 = pd.DataFrame({"stock_code": ["1111", "2222", "3333"], "stock_rsi": ["21", "14", "20"]}) print(df1) df2 = pd.DataFrame({"stock_code": [1111, 2222, 3333, 4444], "dvidend_amout": ["210", "124", "2", "50"]}) print(df2) print(pd.merge(df1, df2, on="stock_code")) |
1 |
ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat |
このような場合はastypeで列の型をどちらかに合わせてからマージするようにします。(下記はstrに合わせた例です)
1 |
df2["stock_code"] = df2["stock_code"].astype(str) |
証券コードをキーにしておくことで、それぞれ別の情報源から取ってきた銘柄情報を一つのデータフレームにマージすることができます。マージには色々な機能というかオプションがありますが、ひとまずこれぐらいを覚えておけば銘柄分析に十分活用できますよ。
Pandas本はこれを辞書的に使うと徐々に知識が体系化できてきます。
Please follow and like us: