【Python】Pandasのメソッドの紹介~データフレームの「マージ」「結合」、データのソート~

データ分析に役立つ「Pandas」というライブラリがあります。

これまでにも概要をまとめた記事(リンク)がありますが、「データフレーム」という形で「データ」を扱えるのが特徴です。

今回は「Pandas」の中でも、データフレームの「マージ」「結合」、データのソートを行うメソッドについて、まとめようと思います。

データフレームのマージ(特定の列の値を基準)

以下のメソッドで、2つのデータフレームを指定した列をキーとして結合します。

merge()

また、「on=」で結合キーを指定し、「how=」で結合方法(内部結合、外部結合など)を指定できます。

内部結合は「共通する ID のみ」を対象とし、外部結合は「全てのID」を対象として結合します。

コードサンプル:

import pandas as pd

# サンプルデータ
data1 = {
‘ID’: [1, 2, 3],
‘名前’: [‘田中’, ‘鈴木’, ‘佐藤’] }

data2 = {
‘ID’: [1, 2, 4],
‘年齢’: [25, 30, 22] }

data3 = {
‘ID’: [1, 3, 5],
‘出身’: [‘東京’, ‘埼玉’, ‘千葉’] }

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)

# ‘ID’列を基準に内部結合
merged_df1 = pd.merge(df1, df2, on=’ID’, how=’inner’)

# ‘ID’列を基準に外部結合
merged_df2 = pd.merge(merged_df1, df3, on=’ID’, how=’outer’)

print(‘内部結合の結果’)
print(merged_df1)
print(‘\n外部結合の結果’)
print(merged_df2)

実行結果:

内部結合の結果

    ID  名前  年齢
0  1   田中  25
1  2   鈴木  30

外部結合の結果

  ID  名前  年齢  出身
0  1  田中  25.0  東京
1  2  鈴木  30.0  NaN
2  3  NaN  NaN  埼玉
3  5  NaN  NaN  千葉

データフレームの結合

以下のメソッドで、複数のデータフレームを結合します。

concat()

ただし、結合対象のデータフレームに存在する列に過不足があった場合はエラーになります。

また、「axis=」で行方向(0を指定)に結合するか、列方向(1を指定)に結合するかを指定できます。

コードサンプル:

import pandas as pd

# サンプルデータ
data1 = {
‘ID’: [1, 2],
‘名前’: [‘田中’, ‘鈴木’] }

data2 = {
‘ID’: [2, 3],
‘年齢’: [25, 30] }

data3 = {
‘ID’: [3, 4],
‘名前’: [‘佐藤’, ‘山田’] }

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)

# 行方向に結合
concat_df1 = pd.concat([df1, df2, df3], axis=0)
concat_df2 = pd.concat([df1, df2, df3], axis=1)

print(‘行方向に結合’)
print(concat_df1)
print(‘\n縦方向に結合’)
print(concat_df2)

実行結果:

行方向に結合

    ID    名前    年齢
0    1    田中    NaN
1    2    鈴木    NaN
0    2    NaN    25.0
1    3    NaN    30.0
0    3    佐藤    NaN
1    4    山田    NaN

縦方向に結合

    ID    名前    ID    年齢    ID    名前
0    1    田中    2       25     3     佐藤
1    2    鈴木    3       30     4     山田

データのソート

以下のメソッドで、データフレームのデータをソートします。

sort_values()

ソートする際の「列」および「昇順(小さい順)/降順(大きい順)」は指定することができ、順に「by」「ascending」を使用します。

なお、「ascending」は明示的に指定しなくても実行可能で、その場合は昇順になります。

コードサンプル:

import pandas as pd

# サンプルデータ
data = {
‘名前’: [‘田中’, ‘鈴木’, ‘佐藤’],
‘年齢’: [25, 30, 22] }

df = pd.DataFrame(data)

# ‘名前’列で昇順にソート
sorted_by_name = df.sort_values(by=’名前’, ascending=True)
print(“Sorted by Name (ascending):”)
print(sorted_by_name)

# ‘年齢’列で降順にソート
sorted_by_age = df.sort_values(by=’年齢’, ascending=False)
print(“\nSorted by Age (descending):”)
print(sorted_by_age)

実行結果:

Sorted by Name (ascending):
名前 年齢
2  佐藤   22
0  田中   25
1  鈴木   30

Sorted by Age (descending):
名前 年齢
1  鈴木   30
0  田中   25
2  佐藤   22

まとめ

今回は、Pythonで扱えるライブラリの「Pandas」のメソッドについてまとめてみました。

他にも多くのメソッドが存在するため、複数の記事に渡って解説しています。

他の記事も、ぜひ参考にしてみて下さい。

広告