Pythonで2つ以上のPandas DataFrameを列方向に連結する方法
2つ以上のPandas DataFrameを連結したい場合には、concat()関数を使用します。列方向(横方向)に連結するには、axisパラメータにaxis=1を指定します。デフォルトのaxis=0は行方向(縦方向)の連結となるため、列方向に並べたい場合は必ず指定が必要です。
まず、必要なライブラリをインポートします。
import pandas as pd
1つ目のDataFrameを作成
dataFrame1 = pd.DataFrame(
{
"Col1": [10, 20, 30],
"Col2": [40, 50, 60],
"Col3": [70, 80, 90],
},
index=[0, 1, 2],
)
2つ目のDataFrameを作成
dataFrame2 = pd.DataFrame(
{
"Col1": [100, 110, 120],
"Col2": [130, 140, 150],
"Col3": [160, 170, 180],
},
index=[3, 4, 5],
)
3つ目のDataFrameを作成
dataFrame3 = pd.DataFrame(
{
"Col1": [200, 210, 220],
"Col2": [230, 240, 250],
"Col3": [260, 270, 280],
},
index=[6, 7, 8],
)
3つのDataFrameを列方向に連結する
作成した3つのDataFrameをリストにまとめ、pd.concat()に渡して「axis=1」を指定することで、列方向に連結できます。
res = [dataFrame1, dataFrame2, dataFrame3]
result = pd.concat(res, axis=1)
完全なサンプルコード
以下が全体のコードです。
import pandas as pd
# DataFrame1を作成
dataFrame1 = pd.DataFrame(
{
"Col1": [10, 20, 30],
"Col2": [40, 50, 60],
"Col3": [70, 80, 90],
},
index=[0, 1, 2],
)
print("DataFrame1...\n", dataFrame1)
# DataFrame2を作成
dataFrame2 = pd.DataFrame(
{
"Col1": [100, 110, 120],
"Col2": [130, 140, 150],
"Col3": [160, 170, 180],
},
index=[3, 4, 5],
)
print("DataFrame2...\n", dataFrame2)
# DataFrame3を作成
dataFrame3 = pd.DataFrame(
{
"Col1": [200, 210, 220],
"Col2": [230, 240, 250],
"Col3": [260, 270, 280],
},
index=[6, 7, 8],
)
print("DataFrame3...\n", dataFrame3)
# 3つのDataFrameを列方向に連結(axis=1を指定)
res = [dataFrame1, dataFrame2, dataFrame3]
print("\n3つのDataFrameを列方向に連結した結果...\n", pd.concat(res, axis=1))
実行結果
上記のコードを実行すると、以下のような出力が得られます。
DataFrame1...
Col1 Col2 Col3
0 10 40 70
1 20 50 80
2 30 60 90
DataFrame2...
Col1 Col2 Col3
3 100 130 160
4 110 140 170
5 120 150 180
DataFrame3...
Col1 Col2 Col3
6 200 230 260
7 210 240 270
8 220 250 280
3つのDataFrameを列方向に連結した結果...
Col1 Col2 Col3 Col1 Col2 Col3 Col1 Col2 Col3
0 10.0 40.0 70.0 NaN NaN NaN NaN NaN NaN
1 20.0 50.0 80.0 NaN NaN NaN NaN NaN NaN
2 30.0 60.0 90.0 NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN 100.0 130.0 160.0 NaN NaN NaN
4 NaN NaN NaN 110.0 140.0 170.0 NaN NaN NaN
5 NaN NaN NaN 120.0 150.0 180.0 NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN 200.0 230.0 260.0
7 NaN NaN NaN NaN NaN NaN 210.0 240.0 270.0
8 NaN NaN NaN NaN NaN NaN 220.0 250.0 280.0
ポイント:NaNが発生する理由と対処法
出力結果を見ると、多くのセルがNaN(欠損値)になっています。これは、各DataFrameのインデックスが異なるためです。axis=1で列方向に連結する場合、Pandasはインデックスを基準に行を揃えます。そのため、インデックスが一致しない行には自動的にNaNが挿入されます。
もしNaNを発生させずに単純に横へ並べたい場合は、ignore_index=Trueを指定してインデックスを振り直す方法があります。
result = pd.concat(res, axis=1, ignore_index=True)
このようにpd.concat()を使えば、2つどころか3つ以上の任意の数のDataFrameも簡単に連結できるので、データ前処理の際にぜひ活用してください。
-
Pythonで2つの辞書を比較する方法:==演算子と共通項目の抽出
Pythonにおいて、辞書(dict型)もクラスの一種です。dictクラスでは__eq__メソッドがオーバーライドされているため、==演算子を使うだけで、2つの辞書が等しいかどうかを簡単に確認できます。例:==演算子で辞書を比較するa = {foo: 10, bar: 150} b = {foo: 10, bar: 150} print(a == b)出力結果Trueキーと値のペアがすべて一致していればTrueが返されます。なお、辞書の比較では要素の並び順は影響しないため、順序が異なっていても中身が同じであれば等しいと判定されます。2つの辞書の共通項目を取得する方法2つの辞書に共通して存在する
-
Pythonで2つのタプルを比較するにはどうすればよいですか?
Pythonでは、タプルは辞書式順序(lexicographical order)で比較されます。まず最初のタプルの1番目の要素と2番目のタプルの1番目の要素が比較され、等しくなければその時点で比較結果が確定します。等しい場合は2番目の要素、次に3番目の要素…というように、順番に比較が進んでいきます。例:タプル同士の大小比較>>> a = (1, 2, 3) >>> b = (1, 2, 5) >>> a < b Trueこの例では、最初の2つの要素(1と2)はどちらのタプルでも等しいため、比較は3番目の要素に進みます。「3 <