【Pandas】データフレームを行方向(縦方向)に結合する

今回は複数のデータフレームを行方向(縦方向)に結合する方法を紹介します。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"
df_amazon = pd.read_csv("input/amazon_stock.csv")
df_apple = pd.read_csv("input/apple_stock.csv")
df_Walmart = pd.read_csv("input/walmart_stock.csv")

append()

append()はデータフレームオブジェクトが持つメソッドです。あるデータフレームのメソッドとして呼び、引数で結合したいデータフレームを指定します。このとき、引数で指定したデータフレームが下に結合されます。

append()では、それぞれのデータフレームの列ごとに列名を比較、同じであればその下に結合します。異なる場合は、新規列が作成されます。列順が異なっていても、列名が同じであれば同列として結合されます。

属性が同じデータフレームの場合

属性(列)の名称、順番が全て同じデータフレームdf_amazonとdf_appleを結合します。

df1 = df_amazon.append(df_apple)
df1 = df_amazon.append(df_apple)

このとき、インデックスはもとのデータフレームのままなので、必要があればreset_index()でインデックスを振りなおしてください。

属性が異なるデータフレームの場合

結合元のデータフレームあって、結合対象のデータフレームにない属性は、nanとなり、結合元にない属性は新規列として作成されます。

df_amazon.append(df_Walmart)
df_amazon.append(df_Walmart)

concat()

concat()はPandasの共通関数です。concat()では結合したいデータフレームを引数に全て渡します。

またconcat()は縦の結合だけでなく、横方向の結合もできるので、結合時に縦か横かを指定する必要があります。なお、デフォルトは縦方向の結合です。

df3 = pd.concat([df_amazon, df_apple])
df3 = pd.concat([df_amazon, df_apple])

2つのデータフレームを結合した結果は、append()の場合と同じです。

3つ以上のデータフレームを結合する場合

concat()では3つ以上のデータフレームをまとめて結合することができます。結合したいデータフレームをリスト形式で指定すると、その順に結合されます。

df4 = pd.concat([df_amazon, df_apple, df_Walmart])
df4 = pd.concat([df_amazon, df_apple, df_Walmart])

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

初学者の方にはこちらもオススメです^^

まとめ

Pandasでデータフレームを行方向に結合する方法について紹介しました。

append()とconcat()のどちらも使えますが、3つ以上のデータフレームをまとめて結合したい場合はconcat()の方が有効そうです。

是非参考にしてください^^

ではでは👋