Python中pandas透视表pivot_table功能详解

Python015

Python中pandas透视表pivot_table功能详解,第1张

透视表 是一种可以对 数据动态排布并且分类汇总的表格格式 。或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能, 而在pandas中它被称作pivot_table。

首先读取数据,数据集是火箭队当家球星James Harden某一赛季比赛数据作为数据集进行讲解。

下官方文档中pivot_table的函数体: pandas.pivot_table - pandas 0.21.0 documentation

pivot_table有四个最重要的参数 index 、 values 、 columns 、 aggfunc ,本文以这四个参数为中心讲解pivot操作是如何进行。

数据格式如下:

每个pivot_table必须拥有一个 index ,如果想查看james harden对阵每个队伍的得分,首先我们将对手设置为 index :

对手成为了第一层索引,还想看看对阵同一对手在不同主客场下的数据,试着将对手与胜负与主客场都设置为 index ,其实就变成为了两层索引

试着交换下它们的顺序,数据结果一样:

看完上面几个操作, Index 就是层次字段,要通过透视表获取什么信息就按照相应的顺序设置字段,所以在进行pivot之前你也需要足够了解你的数据。

通过上面的操作,我们获取了james harden在对阵对手时的所有数据, 而 Values 可以对需要的计算数据进行筛选 ,如果我们只需要james harden在主客场和不同胜负情况下的得分、篮板与助攻三项数据:

aggfunc 参数可以设置我们对数据聚合时进行的函数操作。

当我们未设置 aggfunc 时,它默认 aggfunc='mean' 计算均值。我们还想要获得james harden在主客场和不同胜负情况下的总得分、总篮板、总助攻时:

Columns类似 Index 可以设置列层次字段,它不是一个必要参数,作为一种分割数据的可选方式。

fill_value 填充空值, margins=True 进行汇总

现在我们已经把关键参数都介绍了一遍,下面是一个综合的例子:

结果如下:

aggfunc 也可以使用 dict 类型,如果 dict 中的内容与 values 不匹配时,以 dic t中为准。

结果就是助攻求 min , max 和 mean ,得分求 mean ,而篮板没有显示。

①导入xlrd模块

②导入excel data=xlrd.open_workbook('xxx.xlsx')

③进行交换的方法就是进行多次赋值操作,利用xlrd模块中的put_cell函数就可以进行赋值,然后写一个循环语句就可以实现两列之间的交换。

页面解析有多种方法。

1. 使用beautifulsoup框架。

from bs4 import BeautifulSoup

bs = BeautifulSoup('网页源码', "html.parser")

bs.table # 可以直接获取table元素

bs.find('table',attrs = {'class':'mytable'}) # 查找class属性值为mytable的table元素

# 具体方法可以参见官方文档 https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

2. 使用正则表达式