アルバイト募集2018-08-21Pandasで列と行を相互に変換するstackとunstack関数の使い方Tweetstack関数APIドキュメントparams:returns:カラムラベルが単一列のとき複数列構造(MultiIndex)のときstackする階層を指定する欠損値も表示させるunstack関数APIドキュメントparams:returns:インデックスラベルが単層のとき多層構造(MultiIndex)のときfill_valueで欠損値の補完まとめ参考Pandasでは列データを行データへと変換するstack関数と逆に行データを列データへと変換するunstack関数が実装されています。した見た目を変更する時もかなり手軽に出来るようになるので使ってみることをオススメします。MultiIndexとなっているDataFrameに対して分析したい対象が見やすくなるように整形することが容易になります。本記事ではstack関数とunstack関数の使い方を解説します。stack関数まずはstack関数から解説します。stack関数を使うことで列から行への変換をすることができます。(省略可能)初期値-1どの階層のカラムラベルをインデックスラベルに移動させるかを選択します。デフォルトでは最も内側(level=-1)のカラムラベルを移動させます。複数階層選択することも可能です。(省略可能)初期値True変形した際に生じる欠損値しかない行データを削除するかどうかを指定します。returns:変形されたDataFrameまたはSeries引数は合わせて2つほどあります。1つは移動させるカラムラベルの階層を指定するlevel引数ともう1つは移動させた際に発生する欠損値を含む行を取り除くかどうかを指定するdropna引数です。変形した結果1つの列データしか残らない場合、Seriesになります。使いながら覚えた方が早いと思うので手を動かしていきます。カラムラベルが単一列のときまずは以下のCSVファイルのデータを利用します。basic,basic,basic,score,score,score,class,grade,state,math,English,scienceAlice,A,2,NY,85,69,50Bob,B,1,DC,92,93,65Catharine,B,1,DC,85,55,60David,B,2,PA,70,89,79Ellen,A,3,NY,98,86,67Frank,A,3,DC,84,61,50George,B,1,OH,97,95,62Helen,A,2,OR,87,92,67このファイルをsample_stack.csvとして保存します。以下のリンクからもダウンロードできます。smaple_stack.csvまずはカラムラベルが単一列(マルチインデックスではない場合)の時を試したいので一番上の行は読み飛ばして読み込みます。67ではこのDataFrameにstack関数を適用させてみます。カラムラベルが単層構造(MultiIndexではない)ので、返り値はSeriesになります。少々データが多めなので長めのデータとなります。objectこの時インデックスラベルはMultiIndexオブジェクトとなっており、名前ー情報の種類となっています。複数列構造(MultiIndex)のとき次は先ほどのデータのカラムラベルをMultiIndexオブジェクトとして読み込みます。67このまま適用してみます。すると、下の階層のカラムラベルが移動することになります。NaNstackする階層を指定する次はlevel引数を使ってstackする階層を指定してみます。デフォルトでは最も内側(カラムラベルでなら最も下とも表現できます)の層を移動させています。level=0だと一番外側で、level=1だと1つ内側になります。NaNリストで両方指定することも可能です。object欠損値も表示させるdropna=Falseにすると移動後に新たに生じる組み合わせ(例えばbasicとEnglish)は基本NaN値があてがわれます。この結果両方とも欠損値となった場合、省略するかどうかを指定します。英語の成績を全部NaNに置き換えます。67次にこのDataFrameに対してstack関数を適用してみます。次にstack関数と逆の操作。インデックスラベルをカラムラベルに移動させるunstack関数の使い方について解説します。行うこと自体が逆になるだけなので、基本的な考え方はstack関数とほぼ同一です。(省略可能)初期値-1どの階層のカラムラベルをインデックスラベルに移動させるかを選択します。デフォルトでは最も内側(level=-1)のカラムラベルを移動させます。複数階層選択することも可能です。(省略可能)初期値None変形した際に欠損値が発生するとき、どんな値で埋め合わせをするかを指定します。returns:変形されたDataFrameまたはSeries引数をみてみると先ほどあったdropnaの代わりにfill_valueが追加されています。したのかは今ひとつ不明ですがfill_valueがあることでunsatck関数では新たに生成された欠損値に対する補完を行う値を指定ができます。インデックスラベルが単層のとき先ほどと同じデータを使います。NaN値もそのまま残しておきます。67unstack関数を適用させます。行→列へとデータが変換されます。今回インデックスラベルが単層なので変形後のデータはSeriesとなるので横長ではなく縦長の見た目のデータとなります。object多層構造(MultiIndex)のときもう一度csvファイルから読み込みます。今度は名前とクラスをインデックスラベルに設定します。columns]fill_valueで欠損値の補完fill_value引数で欠損値の補完を行うことができます。今回は"missing"で穴埋めしてみます。columns]まとめ今回はラベルを移動させるstack、unstack関数の使い方についてまとめました。stackは列→行unstackは行→列となります。MultiIndexと一緒に使いこなせるようになるとデータの見た目を簡単に変えることができます。documentationTweetDeepAgeではAIに関する厳選した内容を記事にしてお届けします。