pivotで形を変える

pandas でデータを整形する

Maria Eugenia Inzaugarat

Data Scientist

縦長から横長へ

  • 2つの列の関係を示す
  • 変数で時系列処理
  • 列が一意であることを要する処理
1 https://pandas.pydata.org/docs/user_guide/reshaping.html
pandas でデータを整形する

縦長から横長へ

縦長形式のDataFrame

pandas でデータを整形する

pivotメソッド

縦長から横長への矢印

 

pandasのpivot呼び出し

pandas でデータを整形する

pivotメソッド

縦長から横長への矢印

 

引数付きのpivot呼び出し

pandas でデータを整形する

pivotメソッド

列とインデックスを強調した縦長・横長のDataFrame

 

列名でindex引数を強調

pandas でデータを整形する

pivotメソッド

列と列名を強調した縦長・横長のDataFrame

 

列名でcolumns引数を強調

pandas でデータを整形する

pivotメソッド

列と値を強調した縦長・横長のDataFrame

 

列名でvalues引数を強調

pandas でデータを整形する

pivotメソッド

NaNのセルを強調

 

列名で引数を強調

pandas でデータを整形する

データのpivot変換

fifa = pd.read_csv('fifa_players.csv')
fifa.head()
                 name    variable  metric_system  imperial_system
0   Cristiano Ronaldo      weight             83           183.00
1            J. Oblak      weight             87           191.00
2   Cristiano Ronaldo      height            187             6.13
3     J. Oblak             height            188             6.16
pandas でデータを整形する

データのpivot変換

fifa.pivot(index='name'                                            )
pandas でデータを整形する

データのpivot変換

fifa.pivot(index='name', columns='variable'                        )
pandas でデータを整形する

データのpivot変換

fifa.pivot(index='name', columns='variable', values='metric_system')
         variable  height   weight
             name        
Cristiano Ronaldo     187       83
         J. Oblak     188       87
pandas でデータを整形する

複数列のpivot

fifa.pivot(index='name', columns='variable', values=['metric_system', 'imperial_system'])
                     metric_system     imperial_system       
         variable   height  weight     height   weight
             name                                                         
Cristiano Ronaldo      187      83       6.13    183.0
         J. Oblak      188      87       6.16    191.0
pandas でデータを整形する

複数列のpivot

 

階層列インデックスの横長形式へ矢印

 

indexとcolumns引数を列名で強調

pandas でデータを整形する

複数列のpivot

fifa.pivot(index="name", columns="variable")
                     metric_system     imperial_system       
         variable   height  weight     height   weight
             name                                                         
Cristiano Ronaldo      187      83       6.13    183.0
         J. Oblak      188      87       6.16    191.0
pandas でデータを整形する

重複エントリのエラー

another_fifa.head()
                 name    variable  metric_system  imperial_system
0   Cristiano Ronaldo      weight             83           183.00
1            J. Oblak      weight             87           191.00
2   Cristiano Ronaldo      height            187             6.13
3            J. Oblak      height            188             6.16
4   Cristiano Ronaldo      height            187             6.14
pandas でデータを整形する

重複エントリのエラー

another_fifa.head()
                 name    variable  metric_system  imperial_system
0   Cristiano Ronaldo      weight             83           183.00
1            J. Oblak      weight             87           191.00
  2   Cristiano Ronaldo      height            187             6.13 <--
3            J. Oblak      height            188             6.16
  4   Cristiano Ronaldo      height            187             6.14 <--
pandas でデータを整形する

重複エントリのエラー

another_fifa.pivot(index="name", columns="variable")
ValueError: Index contains duplicate entries, cannot reshape

 

another_fifa = another_fifa.drop(4, axis=0)
another_fifa.pivot(index="name", columns="variable")
                     metric_system     imperial_system       
         variable   height  weight     height   weight
             name                                                         
Cristiano Ronaldo      187      83       6.13    183.0
         J. Oblak      188      87       6.16    191.0
pandas でデータを整形する

Ayo berlatih!

pandas でデータを整形する

Preparing Video For Download...