今回は複数のデータフレームを行方向(縦方向)に結合する方法を紹介します。SQLではUNIONにあたるこの処理ですが、Pandasではappend()またはconcat()にて実装します。
それぞれの処理について見ていきます。
使用するデータ
今回は株価データを使いますが、属性(列)の同じデータフレーム、異なるデータフレームを用意します。
import pandas as pd
df_amazon = pd.read_csv("input/amazon_stock.csv")
df_amazon = df_amazon.loc[:9]
df_amazon["data"] = "amazon"
df_apple = pd.read_csv("input/apple_stock.csv")
df_apple = df_apple.loc[:9]
df_apple["data"] = "apple"
#形の異なるデータフレーム
df_Walmart = pd.read_csv("input/walmart_stock.csv")
df_Walmart = df_Walmart.loc[:9]
df_Walmart["data"] = "Walmart"
append()
append()はデータフレームオブジェクトが持つメソッドです。あるデータフレームのメソッドとして呼び、引数で結合したいデータフレームを指定します。このとき、引数で指定したデータフレームが下に結合されます。
append()では、それぞれのデータフレームの列ごとに列名を比較、同じであればその下に結合します。異なる場合は、新規列が作成されます。列順が異なっていても、列名が同じであれば同列として結合されます。
属性が同じデータフレームの場合
属性(列)の名称、順番が全て同じデータフレームdf_amazonとdf_appleを結合します。
df1 = df_amazon.append(df_apple)
このとき、インデックスはもとのデータフレームのままなので、必要があればreset_index()でインデックスを振りなおしてください。
属性が異なるデータフレームの場合
結合元のデータフレームあって、結合対象のデータフレームにない属性は、nanとなり、結合元にない属性は新規列として作成されます。
df_amazon.append(df_Walmart)
concat()
concat()はPandasの共通関数です。concat()では結合したいデータフレームを引数に全て渡します。
またconcat()は縦の結合だけでなく、横方向の結合もできるので、結合時に縦か横かを指定する必要があります。なお、デフォルトは縦方向の結合です。
df3 = pd.concat([df_amazon, df_apple])
2つのデータフレームを結合した結果は、append()の場合と同じです。
3つ以上のデータフレームを結合する場合
concat()では3つ以上のデータフレームをまとめて結合することができます。結合したいデータフレームをリスト形式で指定すると、その順に結合されます。
df4 = pd.concat([df_amazon, df_apple, df_Walmart])
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
初学者の方にはこちらもオススメです^^
まとめ
Pandasでデータフレームを行方向に結合する方法について紹介しました。
append()とconcat()のどちらも使えますが、3つ以上のデータフレームをまとめて結合したい場合はconcat()の方が有効そうです。
是非参考にしてください^^
ではでは👋