【Pandasデータ整形】DataFrameの行と列を入れ替える(転置)方法 Tとtranspose()


 

データ分析の作業では、データの見方を変えたり、特定の分析手法に合わせた形式に整形したりする必要が頻繁に生じます。その中でも特に便利なのが、DataFrameの**行と列を入れ替える「転置(Transpose)」**操作です。Pandasでは、この転置を簡単に行うためのメソッドが用意されています。この記事では、Pandas DataFrameの転置操作を行うT属性とtranspose()メソッドについて、短いサンプルコードと丁寧な解説を交えてご紹介します。


 

DataFrameを転置するとは?なぜ転置するのか?

 

DataFrameの転置とは、DataFrameの行を列に、列を行に入れ替える操作のことです。つまり、元のDataFrameのインデックスが新しいDataFrameの列名に、元のDataFrameの列名が新しいDataFrameのインデックスになります。

転置操作がデータ分析において重要な理由は以下の通りです。

  • データ構造の調整: 特定のライブラリや分析手法が、行と列に特定のデータ型やカテゴリを要求する場合に、データ構造を合わせるために使われます。

    • 例: 機械学習ライブラリでは特徴量を列、サンプルを行とするのが一般的ですが、元データが逆の構造になっている場合に転置します。

  • 可視化の準備: グラフやチャートでデータを表現する際に、より適切な軸の配置にするために転置することがあります。

  • データの比較: 異なるデータセットを結合したり比較したりする際に、構造を揃えるために一時的に転置を行うことがあります。

  • データ入力の便宜: 人間が手作業でデータを入力する際に、行と列が逆の方が入力しやすいケースがあるため、その後の分析用に転置します。


 

DataFrameの転置方法: T属性とtranspose()メソッド

 

Pandasでは、DataFrameの転置を行うために、非常に直感的な2つの方法が提供されています。

 

T属性を使う(最も簡単で一般的)

 

最もシンプルで推奨される方法です。DataFrame名の後ろに.Tとつけるだけで転置できます。

Python
 
import pandas as pd

# サンプルDataFrameの作成
df = pd.DataFrame({
    '月': ['1月', '2月', '3月'],
    '売上A': [100, 150, 120],
    '売上B': [80, 110, 90]
})
print("オリジナルDataFrame:\n", df)

# DataFrameを転置する
df_transposed = df.T
print("\n転置後DataFrame (.T):\n", df_transposed)

解説:

  • 元のDataFrameの'月', '売上A', '売上B'という列名が、転置後のDataFrameのインデックスになっています。

  • 元のDataFrameのインデックス0, 1, 2が、転置後のDataFrameの列名になっています。

  • データそのものも、行と列が入れ替わっています。

 

transpose()メソッドを使う

 

T属性と同じ機能を提供しますが、こちらはメソッド形式です。特定の引数を使ってより柔軟な制御ができる場合がありますが、基本的な転置にはTを使うのが一般的です。

Python
 
# DataFrameを転置する (transpose() メソッド)
df_transposed_method = df.transpose()
print("\n転置後DataFrame (.transpose()):\n", df_transposed_method)

解説:

df.transpose()の結果はdf.Tと全く同じです。ほとんどの場合、シンプルさから.Tが選ばれます。


 

転置後のインデックス/列名とデータ型

 

転置操作後のDataFrameは、元のDataFrameの構造に応じて、インデックスやデータ型が変化する場合があります。

 

インデックスと列名の確認

 

転置後のインデックスと列名は、元のDataFrameのそれらと入れ替わります。

Python
 
print("\n転置後のインデックス:", df_transposed.index)
print("転置後の列名:", df_transposed.columns)

解説:

  • 転置後のインデックスは、元のDataFrameの列名('月', '売上A', '売上B')になっています。

  • 転置後の列名は、元のDataFrameのインデックス(0, 1, 2)になっています。

 

データ型の変化に注意

 

元のDataFrameに複数のデータ型(例: 文字列と数値)が混在している場合、転置後のDataFrameでは、すべての要素を保持できる共通のデータ型(例えばobject型)に自動的に変換されることがあります。

Python
 
# データ型が混在するDataFrame
df_mixed = pd.DataFrame({
    'ID': ['A1', 'B2'],
    'Value1': [10, 20],
    'Value2': [1.5, 2.5]
})
print("\nデータ型混在オリジナルDataFrame:\n", df_mixed)
print("オリジナルDataFrameのデータ型:\n", df_mixed.dtypes)

# 転置
df_mixed_transposed = df_mixed.T
print("\nデータ型混在転置後DataFrame:\n", df_mixed_transposed)
print("転置後DataFrameのデータ型:\n", df_mixed_transposed.dtypes)

解説:

転置後のDataFrameでは、元の文字列(’A1′, ‘B2’)と数値(10, 20, 1.5, 2.5)をすべて保持できるobject型に変換されていることがわかります。転置後に特定の数値計算を行う場合は、必要に応じて明示的にデータ型を変換し直す必要があるかもしれません。


 

まとめ

 

PandasのDataFrameで行と列を入れ替える(転置する)操作は、データ整形において非常に基本的ながら強力なテクニックです。.T属性を使えば直感的かつ簡単に転置でき、transpose()メソッドも同じ機能を提供します。この転置操作によって、データの構造を分析や可視化に適した形に柔軟に調整することができます。特に、行と列の意味を入れ替えてデータを解釈したい場合や、機械学習モデルの入力形式に合わせたい場合に、この転置機能はあなたのデータ分析ワークフローを格段に効率化してくれるでしょう。