在数据分析领域,数据透视表是一种强大的工具,它允许快速地对数据进行汇总和分析。在Microsoft Excel中,数据透视表是最受欢迎的功能之一。但知道吗?可以使用Python中的Pandas库来构建类似的数据透视表。Pandas提供了一个名为pivot_table的函数,用于创建一个整洁的二维表格来汇总特征值。这个数据透视表与Pandas中的groupby()函数类似,将在本文中探讨如何在Python中构建这样的数据透视表,甚至可以使用Pandas数据透视表和绘图库来创建不同的可视化图表。
学习如何在创建的数据透视表中对特征使用不同的聚合函数。
学习如何处理Pandas数据透视表中的缺失数据。
在数据科学之旅中,可能已经遇到过泰坦尼克号数据集。这是在准备探索项目时首先接触的数据集之一。将使用这个数据集来展示pivot_table函数的有效性。让导入相关的库:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
对于所有忘记了泰坦尼克号数据集是什么样子的人,在这里展示这个数据集!
df = pd.read_csv('drive/My Drive/AV/train.csv')
df.head()
将删除多个列,以便于分析数据并展示pivot_table函数的能力:
df.drop(['PassengerId','Ticket','Name'],inplace=True,axis=1)
上述语法从数据集中删除了列名'PassengerId'、'Ticket'和'Name'的列。
现在是时候使用Pandas库在Python中构建数据透视表了!将在本文中探索Python数据透视表的不同方面,并从头开始构建一个出色的、灵活的类似Excel的数据透视表。
如何使用索引在数据透视表中对数据进行分组?pivot_table需要数据和一个索引参数。数据是传递给函数的Pandas数据框。索引是允许将数据进行分组的特征。索引特征将作为结果表中的索引出现。通常,分类列用作索引。
将使用'Sex'列作为现在的索引:
table = pd.pivot_table(data=df, index=['Sex'])
可以立即比较两个性别的所有特征值。现在,让可视化这个发现。
# 女性乘客支付的票价明显高于男性乘客。
可以在这里了解更多关于如何可视化数据。
甚至可以使用多个特征作为索引来对数据进行分组。这增加了结果表的粒度,并且可以更具体地获得发现:
table = pd.pivot_table(df, index=['Sex', 'Pclass'])
使用数据集上的多个索引使能够得出结论,即女性和男性乘客的票价差异在泰坦尼克号的每个Pclass上都是有效的。
表中显示的值是聚合函数对特征数据进行汇总的结果。聚合函数是pivot_table应用到分组数据的聚合函数。默认情况下,它是np.mean(),但也可以为不同的特征使用不同的聚合函数!只需提供一个字典作为输入到聚合函数参数,特征名称作为键,相应的聚合函数作为值。
table = pd.pivot_table(df, index=['Sex', 'Pclass'], aggfunc={'Age': np.mean, 'Survived': np.sum})
结果表在使用不同的聚合函数对不同特征进行聚合时更有意义。
但是在聚合什么?可以告诉Pandas在聚合函数上应用的特征(s)在values参数中。values参数是告诉函数聚合哪些特征的地方。这是一个可选字段,如果不指定这个值,那么函数将聚合数据集中的所有数值特征:
table = pd.pivot_table(df, index=['Sex', 'Pclass'], values=['Survived'], aggfunc=np.mean)
泰坦尼克号上乘客的生存率随着Pclass的降低而降低,无论性别如何。此外,任何给定的Pclass中,男性乘客的生存率都低于女性乘客。
使用多个特征作为索引是可以的,但是使用一些特征作为列将帮助直观地理解它们之间的关系。此外,通过结合pivot_table的columns参数,结果表总是可以更好地查看。
table = pd.pivot_table(df, index=['Sex'], columns=['Pclass'], values=['Survived'], aggfunc=np.sum)
table = pd.pivot_table(df, index=['Sex', 'Survived', 'Pclass'], columns=['Embarked'], values=['Age'], aggfunc=np.mean)
table = pd.pivot_table(df, index=['Sex', 'Survived', 'Pclass'], columns=['Embarked'], values=['Age'], aggfunc=np.mean, fill_value=np.mean(df['Age']))