使用 pivot 重塑

使用 pandas 重塑数据

Maria Eugenia Inzaugarat

Data Scientist

从长表到宽表

  • 展示两列之间的关系
  • 对变量进行时间序列操作
  • 需要列唯一性的操作
1 https://pandas.pydata.org/docs/user_guide/reshaping.html
使用 pandas 重塑数据

从长表到宽表

长格式 DataFrame

使用 pandas 重塑数据

pivot 方法

箭头:从长表到宽表

 

pandas 的 pivot 调用

使用 pandas 重塑数据

pivot 方法

箭头:从长表到宽表

 

带参数的 pivot 调用

使用 pandas 重塑数据

pivot 方法

长表与宽表,突出列与索引

 

突出 index 参数与列名

使用 pandas 重塑数据

pivot 方法

长表与宽表,突出列与列名

 

突出 columns 参数与列名

使用 pandas 重塑数据

pivot 方法

长表与宽表,突出列与取值

 

突出 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 重塑数据

Vamos praticar!

使用 pandas 重塑数据

Preparing Video For Download...