こんにちは、インストラクターのフクロウです!Pandasで2つ以上のDataFrameを結合する関数はいろいろありますが、その中でもシンプルな機能で使いやすい(と、個人的に思っている)np.concatを紹介します!この記事では
- np.concateとは?
- axisパラメータの使い方
- joinの2つのオプション「innerとouter」
について紹介しますよ!この3つのポイントがわからないよ!って人はぜひこの記事を読んでください!読んで簡単Pandas力アップです!
サンプルデータの作成
まずは例題に使うデータを作っておきます。
# ライブラリをインポート
import pandas as pd
import numpy as np
# データの作成
data = [
[180, 160, 170], # 身長
[80, 50, 70], # 体重
[20, 19, 18], # 年齢
]
name = ["tarou","jirou", "saburou"] # 名前
# DataFrameにデータを格納
data = np.array(data)
df1 = pd.DataFrame(data[[0,1]].T, columns=["身長", "体重"])
df1.index = name
# DataFrameの表示
df1
# サンプルのDataFrame2つ目を作成
df2 = pd.DataFrame(data[[0,2]].T, columns=["身長","年齢"])
df2.index = name
# DataFrameの表示
df2
pd.concatの使い方
concatはDataFrameを結合する関数です。
※concatenateとは
主な意味:(…を)鎖状につなぐ
引用元:weblio https://ejje.weblio.jp/content/concatenate
一概に「結合する」と言っても、方法がいろいろあります。基本的には結合したいデータフレームをリストにまとめて第一引数に渡し、縦方向に連結するか、横方向に連結するかをaxisで指定します。
また、結合の際に重複を許すか共通部分のみにするかをjoin引数で指定します。
axisを使って結合の方向を指定
axisを使うことで列や行方向のどちらに結合するかを決めることができます。axis=1とすると列方向に結合することができます。
pd.concat([df1, df2], axis=1)
身長が重複していますね。次にaxis=0で行方向に結合!
pd.concat([df1, df2], axis=0)
[注意が出てきます]
名前が重複していることがわかりますね。また、結合の結果新しくできた部分にはNaNが入ります。(ここ注意!)
joinを使って重複の扱いを決める
join=”innter”で共通部分のみを残す
pd.concat([df1, df2], join="inner")
この例だと「身長」列だけが残ります。
join=”outer”ですべての要素を残す
pd.concat([df1, df2], join="outer")
outerを指定すると、特に何もして指定しなかったIn[4]と同じ結果になります。ちなみにaxis=1すると以下の通り。
pd.concat([df1, df2], axis=1, join="outer")
pd.concat([df1, df2], axis=1, join="inner")
まとめ
この記事では、DataFrameを結合する関数であるpd.concatを解説しました。pd.concatは縦でも横でも簡単にDataFrameをくっつけることができる関数です。
この関数では特にjoinパラメータが特殊なので、ここに注目して覚えておくことをオススメします!