人生苦短,我用 Pythonhtml
前文传送门:python
小白学 Python 数据分析(2):Pandas (一)概述github
小白学 Python 数据分析(3):Pandas (二)数据结构 Seriesapi
小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame数组
小白学 Python 数据分析(5):Pandas (四)基础操做(1)查看数据数据结构
小白学 Python 数据分析(6):Pandas (五)基础操做(2)数据选择ide
小白学 Python 数据分析(7):Pandas (六)数据导入spa
小白学 Python 数据分析(8):Pandas (七)数据预处理excel
小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
小白学 Python 数据分析(10):Pandas (九)数据运算
小白学 Python 数据分析(11):Pandas (十)数据分组
前文咱们介绍了数据分组,今天咱们接着介绍一个和数据分组很类似的内容,是数据透视表,从名字上来看是否是感受没半毛钱关系,实际否则,数据分组是从一维(行)的角度上对数据进行了拆分,若是咱们想从二维的角度上(行和列)同时对数据进行拆分呢?
这就须要用到咱们今天的主角,数据透视表了。
什么是数据透视表?小编的灵魂画手上线:
图画的很差,各位同窗凑合理解。
在 Excel 中,其实也有数据透视表这个东西,在插入中全选数据后点击数据透视表,就会出来这么个东西:
点击肯定后会有这么个画面:
具体在 Excel 中如何使用各位同窗能够百度查一下,毕竟这里是讲 Python 的地方,关于 Excel 的操做就很少说了,Pandas 的操做和 Excel 的使用仍是比较类似的。
在 Pandas 中,实现数据透视表是使用的 pivot_table()
这个方法,首先仍是放个官方文档,防止有同窗找不到。
官方文档地址: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html 。
再看下 pivot_table 的语法:
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False) → 'DataFrame'
下面咱们来看示例,数据集仍是使用上篇文章使用的疫情数据集,先看个简单的示例,咱们按照七大洲,看下当前的确诊状况:
import pandas as pd # 数据导入 epidemic_dxy = pd.read_excel("epidemic_dxy.xlsx") df = pd.pivot_table(epidemic_dxy, values='currentConfirmedCount', index='continents', aggfunc='sum') print(df) # 输出内容 currentConfirmedCount continents 亚洲 5458 其余 699 北美洲 99 南美洲 8 大洋洲 14 欧洲 2040 非洲 3
能够看到,和咱们前面的文章中,按照七大洲直接分组的结果是一致的。
这个示例中的 currentConfirmedCount
是咱们要统计的值, continents
是咱们要拆分的索引, aggfunc
中的 sum
是咱们对须要统计的值的统计方式。
这里只是按照一维的方式进行拆分,和分组并无实际上的区别,接下来咱们看从二维的方向上对数据进行拆分:
import pandas as pd # 数据导入 epidemic_dxy = pd.read_excel("epidemic_dxy.xlsx") df1 = pd.pivot_table(epidemic_dxy, values='currentConfirmedCount', index='continents', columns='provinceName', aggfunc='sum') print(df1) # 输出内容 provinceName 丹麦 亚美尼亚 以色列 伊拉克 伊朗 ... 阿曼 阿联酋 韩国 马来西亚 黎巴嫩 continents ... 亚洲 NaN 1.0 9.0 19.0 749.0 ... 5.0 16.0 4283.0 11.0 3.0 其余 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 北美洲 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 南美洲 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 大洋洲 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 欧洲 3.0 NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 非洲 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN [7 rows x 65 columns]
由于内容比较多,大部分的内容被折叠掉了。
在上面这个示例中,咱们按照七大洲和国家对整个数据表进行了横纵向的拆分,能够看到,整个表中会有不少空值,拿亚洲那一行举例子,由于在咱们的原始数据中只有亚洲只有 26 个国家,因此,理论上亚洲那一行应该只有那 26 个国家有数据,实际上也确实如此。
那么,如今有一个简单的小问题,若是我想要知道每条数据的建立时间( createTime
字段),这个也能行么?
固然能够, pivot_table
支持在横纵向拆分的时候传入一个数组的,以下,咱们在 index 上再加一个新的参数 createTime
:
import pandas as pd # 数据导入 epidemic_dxy = pd.read_excel("epidemic_dxy.xlsx") df2 = pd.pivot_table(epidemic_dxy, values='currentConfirmedCount', index=['continents', 'createTime'], columns='provinceName', aggfunc='sum') print(df2) # 输出内容 provinceName 丹麦 亚美尼亚 以色列 伊拉克 ... 阿联酋 韩国 马来西亚 黎巴嫩 continents createTime ... 亚洲 1583138990000 NaN NaN 9.0 19.0 ... 16.0 4283.0 11.0 3.0 1583138991000 NaN 1.0 NaN NaN ... NaN NaN NaN NaN 其余 1583138990000 NaN NaN NaN NaN ... NaN NaN NaN NaN 北美洲 1583138990000 NaN NaN NaN NaN ... NaN NaN NaN NaN 1583138991000 NaN NaN NaN NaN ... NaN NaN NaN NaN 南美洲 1583138990000 NaN NaN NaN NaN ... NaN NaN NaN NaN 1583138991000 NaN NaN NaN NaN ... NaN NaN NaN NaN 大洋洲 1583138990000 NaN NaN NaN NaN ... NaN NaN NaN NaN 欧洲 1583138990000 3.0 NaN NaN NaN ... NaN NaN NaN NaN 1583138991000 NaN NaN NaN NaN ... NaN NaN NaN NaN 非洲 1583138990000 NaN NaN NaN NaN ... NaN NaN NaN NaN [11 rows x 65 columns]
这样,咱们就获得了一个新的按照三个规则分别进行横纵向拆分的 DataFrame ,固然,这个 DataFrame 目前并非一个标准的 DataFrame ,只须要最后一步,使用 reset_index()
重置一下索引就能够了,这里小编就不演示了。
今天的内容比较短,可是对于第一次接触的同窗来说并非很好理解,建议多动手找个数据集试试看,或者先在 Excel 中进行尝试后再使用 Python 进行理解。
在数据透视表中,得到数据透视表并不难,难点是在于咱们想要构建怎么样的新的数据表,咱们要真正要获取什么样的数据。
老规矩,全部的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便你们取用。
原文出处:https://www.cnblogs.com/babycomeon/p/12424812.html