Pandasの2つのDataFrameを結合する方法を紹介!
Published on
Pandasは、データサイエンスにおいて最も人気のあるオープンソースツールの1つです。DataFrame構造を提供しており、表形式のデータ操作、クリーニング、分析、および可視化に高レベルな性能を提供しています。Pandasでは、2つ以上のDataFramesをマージして、データの分析を行うことが一般的です。データフレームを垂直または水平に組み合わせることによってこれを実現できます。ここでは、両方の方法について詳しく説明します。
Python Pandas Dataframeからコードなしですばやくデータ可視化を作成したいですか?
PyGWalkerは、可視化付きの探索的データ分析のためのPythonライブラリです。 PyGWalker (opens in a new tab)は、pandas dataframe(およびpolars dataframe)をTableauスタイルのユーザーインターフェイスに変換して、ビジュアル探索のためのワークフローを簡素化できます。
垂直に2つのDataFramesを連結する
Pandasでは、 concat()
メソッドを使用して2つのDataFramesを連結できます。これを説明するために、まず2つのサンプルDataFramesを作成します。最初のサンプルDataFrameでは、会社のいくつかの従業員に関する情報があると仮定しましょう。
import pandas as pd
# DataFrame 1を作成する
df1 = pd.DataFrame({
'Name': ['John', 'Jack', 'Steve', 'Sarah'],
'Age': [24, 32, 19, 29],
'Gender': ['M', 'M', 'M', 'F']
})
これにより、以下のようなDataFrameが作成されます。
Name Age Gender
0 John 24 M
1 Jack 32 M
2 Steve 19 M
3 Sarah 29 F
会社の部署に関する情報が含まれる別のDataFrameがあると仮定しましょう。
# DataFrame 2を作成する
df2 = pd.DataFrame({
'Department': ['Marketing', 'Sales', 'Human Resources'],
'Employees': [15, 12, 10],
})
これにより、以下のようなDataFrameが作成されます。
Department Employees
0 Marketing 15
1 Sales 12
2 Human Resources 10
これで、concat()
メソッドを使用して2つのDataFramesを垂直に組み合わせることができます。
# 垂直に連結する
df3 = pd.concat([df1, df2], axis=0)
ここで、 axis = 0
パラメーターは、DataFramesを上下に積み重ねて(つまり、垂直方向に)連結することを示します。連結後、以下の出力が得られます。
Name Age Gender Department Employees
0 John 24 M NaN NaN
1 Jack 32 M NaN NaN
2 Steve 19 M NaN NaN
3 Sarah 29 F NaN NaN
0 NaN NaN NaN Marketing 15
1 NaN NaN NaN Sales 12
2 NaN NaN NaN Human Resources 10
2つのDataFramesが望ましいように連結されていることがわかりますが、列名が一致しない場合には新しいDataFrameのいくつかのNaN
(null)値があります。これらの行は、データ分析に適合しない場合は削除することができ、null値を埋めるためのデフォルト値を与えることができます。
水平に2つのDataFramesを連結する
concat()
メソッドを使用して、2つのDataFramesを水平に連結することもできます(つまり、側面に置いて結合することができます)。
# 水平に連結する
df4 = pd.concat([df1, df2], axis=1)
ここで、axis = 1
パラメーターは、DataFramesを並べて(つまり、水平方向に)連結することを示します。連結後、以下の出力が得られます。以下のmdxとフロントマターを日本語に翻訳する:
Pandasデータフレームの連結
Pandasは、複数のデータフレームを連結して1つにする機能を提供しています。そのためにconcat()
というメソッドが用意されています。この記事では、concat()
メソッドを使ったデータフレームの連結方法について簡単に紹介します。
データフレームの連結
Pandasのconcat()
メソッドを使うと、複数のデータフレームを連結して、新しいデータフレームを作成することができます。concat()
メソッドには、axis
、join
、ignore_index
、keys
などのパラメーターがあります。以下でそれぞれのパラメーターを説明します。
axis
: 連結する方向を指定します。0は縦方向、1は横方向を表します。join
: 連結方法を指定します。デフォルトは「outer
」です。他には「inner
」や「left
」、「right
」があります。ignore_index
: インデックスを無視して新しいインデックスを振り直すかどうかを設定します。keys
: 連結前のデータフレームを区別するために、新しい階層型のインデックスを作成します。
以下では実際に、concat()
メソッドを使ったデータフレームの連結方法について説明します。
縦方向にデータフレームを連結する
concat()
メソッドを使って複数のデータフレームを縦方向に連結する方法を見ていきます。
# 3つのデータフレームを作成する
df1 = pd.DataFrame({
"Name": ["John", "Jack", "Steve", "Sarah"],
"Age": [24, 32, 19, 29],
"Gender": ["M", "M", "M", "F"]
})
df2 = pd.DataFrame({
"Name": ["Peter", "Johnny", "Becky"],
"Age": [27, 23, 21],
"Gender": ["M", "M", "F"]
})
df3 = pd.DataFrame({
"Name": ["Mary", "Jane"],
"Age": [28, 22],
"Gender": ["F"]
})
pd.concat()
メソッドを使って、これらのデータフレームを連結することができます。
# データフレームを縦方向に連結する
df_concat = pd.concat([df1, df2, df3], axis=0)
これによって、3つのデータフレームが縦方向に連結されました。
Name Age Gender
0 John 24 M
1 Jack 32 M
2 Steve 19 M
3 Sarah 29 F
0 Peter 27 M
1 Johnny 23 M
2 Becky 21 F
0 Mary 28 F
1 Jane 22 F
pd.concat()
メソッドのaxis
パラメーターを0に設定することで、データフレームを縦方向に連結することができることがわかります。
横方向にデータフレームを連結する
次は、複数のデータフレームを横方向に連結する方法を見ていきます。
# 2つのデータフレームを作成する
df4 = pd.DataFrame({
"Department": ["Marketing", "Sales", "Human Resources"],
"Employees": [15, 12, 10]
})
df5 = pd.DataFrame({
"Employee Name": ["John", "Jack", "Steve", "Sarah"],
"Employee Age": [24, 32, 19, 29],
"Job Title": ["Manager", "Assistant", "Clerk", "Executive"]
})
これらのデータフレームを横方向に連結するには、axis
パラメーターを1に設定します。
# データフレームを横方向に連結する
df_concat = pd.concat([df4, df5], axis=1)
連結結果は以下の通りです。
Department Employees Employee Name Employee Age Job Title
0 Marketing 15 John 24 Manager
1 Sales 12 Jack 32 Assistant
2 Human Resources 10 Steve 19 Clerk
3 NaN NaN Sarah 29 Executive
希望通り、2つのデータフレームが横方向に連結されています。ただし、行名が一致しない場所にはNaN
(null)の値があります。これらの行は、データ分析に合わない場合は削除することができますが、null値を埋めるデフォルト値を指定することもできます。
列数が異なるデータフレームの連結
2つの連結するデータフレームの列数が異なる場合、Pandasは一致しない列名を特定して、新しいデータフレームに別の列として追加します。これを次の例で説明します。
# 列数が異なるデータフレームを作成する
df5 = pd.DataFrame({
'Employee Name': ['John', 'Jack', 'Steve', 'Sarah'],
'Employee Age': [24, 32, 19, 29],
'Job Title': ['Manager', 'Assistant', 'Clerk', 'Executive']
})
次に、df1
とdf5
を連結します。
# df1とdf5を連結する
df6 = pd.concat([df1, df5], axis=1)
連結後に、次の出力が得られます。
Name Age Gender Employee Name Employee Age Job Title
0 John 24 M John 24 Manager
1 Jack 32 M Jack 32 Assistant
2 Steve 19 M Steve 19 Clerk
3 Sarah 29 F Sarah 29 Executive
Pandasは、一致しない列を新しい列として新しいデータフレームに追加しています。
インデックスを無視して横方向にデータフレームを連結する
2つのデータフレームを横方向に連結する場合、新しいデータフレームには元のデータフレームのインデックスが保持されます。これは、この新しいデータフレームを操作するときに問題が生じる可能性があるため、一定の注意が必要です。この場合、横方向に連結する場合はインデックスを無視することをお勧めします。これは、連結するときにignore_index
パラメーターをTrue
に設定することで実現できます。
# df1とdf2を連結し、インデックスを無視する
df7 = pd.concat([df1, df2], axis=1, ignore_index=True)
連結後に、次の出力が得られます。
``