赞
踩
透视表
是一种可以对数据动态排布并且分类汇总的表格格式,可以以多种方式和视角查看数据特征
Pandas库提供了一个名为pivot_table的函数,它将一个特性的值汇总在一个整洁的二维表中。
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc=’mean’, fill_value=None, margins=False, dropna=True, margins_name=’All’)
Parameters:
data : DataFrame
values : column to aggregate, optional
index: column, Grouper, array, or list of the previous
columns: column, Grouper, array, or list of the previous
aggfunc: function, list of functions, dict, default numpy.mean (If list of functions passed, the resulting pivot table will have hierarchical columns whose top level are the function names. If dict is passed, the key is column to aggregate and value is function or list of function)
fill_value[scalar, default None] : Value to replace missing values with 对缺失值的填充
margins[boolean, default False] : Add all row / columns (e.g. for subtotal / grand totals) 是否启用总计行/列
dropna[boolean, default True] : Do not include columns whose entries are all NaN 删除缺失
margins_name[string, default ‘All’] : Name of the row / column that will contain the totals when margins is True. 总计行/列的名称
Returns: DataFrame
分析的数据使用Titanic 的训练数据集
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 12,6
plt.style.use('ggplot')
df = pd.read_csv('data/titanic/train.csv') # reading data into dataframe
df.drop(['PassengerId','Ticket','Name'],axis=1,inplace=True)
df.head() # displaying first five values
table1 = pd.pivot_table(data=df.head(100),index=['Sex'],values=['Survived','Pclass','Age','SibSp','Parch','Fare'])
table1
table1.plot(kind='bar')
table2 = pd.pivot_table(df,index=['Sex','Pclass'],values=['Survived','Age','SibSp','Parch','Fare'],
margins=True,margins_name='汇总')
table2
可以使用多个特性作为索引来对数据进行分组。这增加了结果表的粒度级别,这样可以获得更具体的发现:
使用数据集上的多个索引,可以一致认为,在泰坦尼克号的每个头等舱中,男女乘客的票价差异都是有效的。
table3 = pd.pivot_table(df,index=['Sex','Pclass'],
aggfunc={'Age':np.mean,'Survived':np.sum})
table3
Values参数告诉函数在哪些特征上聚合。这是一个可选字段,如果你不指定这个值,那么函数将聚合数据集的所有数值特征:
研究发现:泰坦尼克号上乘客的存活率随着等级Pclass的降低而降低。此外,在任何给定的p舱位中,男性乘客的存活率都低于女性乘客。
table4 = pd.pivot_table(df,index=['Sex','Pclass'],
values=['Survived'],
aggfunc=np.mean)
table4
table4.plot(kind='bar');
Columns参数是可选的,它在结果表的顶部水平显示这些值。
table5 = pd.pivot_table(df,index=['Sex'],
columns=['Pclass'],
values=['Survived'],
aggfunc=np.sum)
table5
table5.plot(kind='bar');
table6 = pd.pivot_table(df,index=['Sex','Survived','Pclass'], columns=['Embarked'], values=['Age'], aggfunc=np.mean) table6 ## 用' Age '列的平均值替换NaN值: table7 = pd.pivot_table(df,index=['Sex','Survived','Pclass'], columns=['Embarked'], values=['Age'], aggfunc=np.mean, fill_value=np.mean(df['Age'])) table7 ## 用固定的值-1替换NaN值: table7 = pd.pivot_table(df,index=['Sex','Survived','Pclass'], columns=['Embarked'], values=['Age'], aggfunc=np.mean, fill_value=-1) table7
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。