( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【Python】データの行・列を自在に入れ替える方法|stack

データの行・列を入れ替える

今回はPythonのDataFrameにおいて、「行・列」を入れ替える方法をご紹介します

データを加工する際、分析が実施しやすいデータの形になっていないことがあります

そんな時、これからご紹介するTを利用し、データの行・列を自由に入れ替えることができます

また単純に行と列を入れ替えるだけではなく、列を行に変換するstackもご紹介します


単純に行・列を入れ替えるにはTを利用します(下記はイメージ)

Pythonの行列入れ替えのイメージ図

続いて行を増やして、列を入れ替える(スタック)するにはstackを利用します

Pythonのstackのイメージ図

事前準備

学校のイメージ
df = pd.read_excel('学校のテスト.xlsx')
学校のテストのイメージ

行・列を全て入れ替える:T

Pythonの行列入れ替えのイメージ図

Tという単純な文字を使うだけで、行と列を簡単に入れ替えることができます

まずは元のデータを確認してみます

df.head()
df.head()

続いてTを利用して、行列を入れ替えてみます

このデータは500行あるため、その数だけ列ができてしまいます

df.T.head()
df.T.head()

データ分析するには扱いにくい形ですが、このような行・列入れ替えが可能だということを覚えておいてください

列を行に変換する:stack

Pythonの行列入れ替えのイメージ図

今度は「行×列」のデータ型を、行を増やして列名をデータに入れる形に移行します

stackを利用することによって、非常に簡単にデータの持ち方を変えることができます

df.stack()
df.stack

注意点①:Series形式で出力される

stackを利用するとSeries形式で結果が出てきます

そこでDataFrameで囲うことによって、引き続きDataFrameでデータを加工することができます

pd.DataFrame(df.stack())
pd.DataFrame(df.stack())

注意点②:indexは入れ替えできない

DataFrameindexとして登録されている項目に関しては、stackで行・列変換が適応されません

例えば生徒番号と名前がインデックスとなっているデータで、同じようにスタック処理を実施します

set_indexを利用して、indexを登録しておきます

pd.DataFrame(df.set_index(['生徒番号','名前']).stack())
pd.DataFrame(df.set_index(['生徒番号','名前']).stack())

このindexが行・列入れ替えの対象にならないという特徴を利用し、一部の列のみ行変換を実施することが可能です

学校データで集計対象である「国語・数学・英語」のデータのみ行に変換します

index = ['生徒番号','名前','クラス','性別','部活','部活_種類']
pd.DataFrame(df.set_index(index).stack())
pd.DataFrame(df.set_index(index).stack())

まとめ

今回はDataFrameの行・列を入れ替える方法についてご紹介してきました

データしやすい形がいつも用意されているわけではありません

Tstackを用いて、ご自身にとって操作しやすい形に変形してみてください

お気に入り登録お願いします

コメントを残す

メールアドレスが公開されることはありません。