pandas

【Pandas】DataFrameの列の順番を入れ替える【Python】

MAX

DataFrameを扱っていると、列の順番を入れ替えたくなる時がある。

特に、重要なカラムが後ろの方にある場合、中身を確認するのが面倒になるため、先頭の方に持って来たくなることがある。

DataFrameは列を入れ替えたくても1つの関数ではできず、いくつかのステップを踏む必要がある。

リストの順序も1つの関数で入れ替えられないのと同じような感じ。

スポンサーリンク

DataFrameの列を入れ替える

特定の列の順番を入れ替えるには、3段階のステップを踏む必要がある

  1. 順番を入れ替えたい対象列を一時的に保持する
  2. DataFrameから入れ替え対象列を削除する
  3. DataFrameの任意の場所に対象列を挿入する

データ準備

1import pandas as pd
2
3# サンプル DataFrame を作成
4df = pd.DataFrame({
5  'A': [1, 2, 3],
6  'B': [4, 5, 6],
7  'C': [7, 8, 9],
8})
9
10print(df)
11#    A  B  C
12# 0  1  4  7
13# 1  2  5  8
14# 2  3  6  9

DataFrameの特定の列の順序を入れ替える

以下の例はC列を先頭に持ってくる場合の例。

1# 順番を入れ替えたい列を保持
2target_col = "C"
3df_target = df[target_col]
4
5# 入れ替え対称の列を削除
6df = df.drop(target_col, axis=1)
7
8# 任意の場所に対象の列を挿入
9df.insert(0, target_col, df_target)
10
11print(df)
12#    C  A  B
13# 0  7  1  4
14# 1  8  2  5
15# 2  9  3  6

insertは1列ずつしかできないため、複数の列を同時にまとめて入れ替えるには、対象列と挿入先の列番号をforなどでループさせる必要がある。

複数の列の順序を入れ替える

データ準備

1import pandas as pd
2
3# サンプルDataFrameを作成
4df = pd.DataFrame({
5  'A': [1, 2, 3],
6  'B': [4, 5, 6],
7  'C': [7, 8, 9],
8  'D': [10, 11, 12],
9  'E': [11, 12, 13],
10  'F': [12, 13, 14],
11})
12
13print(df)
14#    A  B  C   D   E   F
15# 0  1  4  7  10  11  12
16# 1  2  5  8  11  12  13
17# 2  3  6  9  12  13  14

サンプルとして少し列を増やしたDataFrameを作成。

複数の列の順序を入れ替える

以下の例はD列とE列をA列の後ろに挿入する場合の例

1
2# A列の後ろにDとEを挿入する場合の例
3target_cols = ["E", "D"]
4insert_index = 1
5
6for target_col in target_cols:
7    # 対象列を一時的に保持
8    df_target = df[target_col]
9    # 対象列を元のDataFrameから削除
10    df.drop(columns=[target_col], inplace=True)
11    # 対象列を目的の場所に挿入
12    df.insert(insert_index, target_col, df_target)
13
14print(df)
15#    A   D   E  B  C   F
16# 0  1  10  11  4  7  12
17# 1  2  11  12  5  8  13
18# 2  3  12  13  6  9  14

上記の例では挿入する場所を1に固定しているため、入れ替え後の列順をA、D、E、B、C、Fの順にするためにEから先にAの後ろに挿入している。

このあたりは、適宜、やりやすい方法でやるしかない。

まとめ

1df = pd.DataFrame({
2  'A': [1, 2, 3],
3  'B': [4, 5, 6],
4  'C': [7, 8, 9],
5})
6# 順番を入れ替えたい列を保持
7target_col = "C"
8df_target = df[target_col]
9
10# 入れ替え対称の列を削除
11df = df.drop(target_col, axis=1)
12
13# 任意の場所に対象の列を挿入
14df.insert(0, target_col, df_target)
15
16print(df)
17#    C  A  B
18# 0  7  1  4
19# 1  8  2  5
20# 2  9  3  6

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました