In [1]: import pandas as pd
- Titanic data
本教程使用存储为CSV的泰坦尼克号数据集。数据由以下数据列组成:
PassengerID:每个乘客的ID。
生还:表示乘客是否生还。
0
是的而且1
不是的。Pclass:3个票类中的一个:类
1
,班级2
和班级3
。姓名:乘客姓名。
性别:乘客性别。
年龄:乘客的年龄,以年为单位。
SibSp:船上兄弟姐妹或配偶的数量。
Parch:船上父母或孩子的人数。
车票:旅客车票号码。
票价:标明票价。
客舱:客舱人数。
已装船:装船港。
In [2]: titanic = pd.read_csv("data/titanic.csv") In [3]: titanic.head() Out[3]: PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked 0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S 1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C 2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S 3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S 4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
如何计算汇总统计?#
汇总统计信息#
泰坦尼克号乘客的平均年龄是多少岁?
In [4]: titanic["Age"].mean() Out[4]: 29.69911764705882
有不同的统计数据可用,并且可以应用于包含数字数据的列。默认情况下,操作通常会排除丢失的数据,并跨行操作。
泰坦尼克号乘客的年龄中值和票价是多少?
In [5]: titanic[["Age", "Fare"]].median() Out[5]: Age 28.0000 Fare 14.4542 dtype: float64
的多列应用的统计信息
DataFrame
(选择两列将返回一个DataFrame
,请参阅 subset data tutorial )是为每个数值列计算的。
可以同时计算多个列的聚合统计信息。请记住 describe
函数从 first tutorial ?
In [6]: titanic[["Age", "Fare"]].describe()
Out[6]:
Age Fare
count 714.000000 891.000000
mean 29.699118 32.204208
std 14.526497 49.693429
min 0.420000 0.000000
25% 20.125000 7.910400
50% 28.000000 14.454200
75% 38.000000 31.000000
max 80.000000 512.329200
属性定义给定列的特定聚合统计信息组合,而不是预定义统计信息 DataFrame.agg()
方法:
In [7]: titanic.agg(
...: {
...: "Age": ["min", "max", "median", "skew"],
...: "Fare": ["min", "max", "median", "mean"],
...: }
...: )
...:
Out[7]:
Age Fare
min 0.420000 0.000000
max 80.000000 512.329200
median 28.000000 14.454200
skew 0.389108 NaN
mean NaN 32.204208
上的用户指南部分提供了有关描述性统计的详细信息 descriptive statistics 。
汇总按类别分组的统计信息#
男性乘客的平均年龄是多少岁,女性乘客的平均年龄是多少岁?
In [8]: titanic[["Sex", "Age"]].groupby("Sex").mean() Out[8]: Age Sex female 27.915709 male 30.726645
由于我们感兴趣的是每个性别的平均年龄,因此首先对这两个列进行小选:
titanic[["Sex", "Age"]]
。接下来,groupby()
方法应用于Sex
列按类别分组。平均年龄 对于每个性别 被计算并返回。
计算给定的统计数据(例如 mean
年龄) 对于列中的每个类别 (例如:男性/女性 Sex
列)是一种常见的模式。这个 groupby
方法用于支持此类操作。更一般的情况下,这符合更一般的情况 split-apply-combine
图案:
拆分 将数据分组
应用 独立于每一组的函数
联合收割机 将结果转换为数据结构
在Pandas身上,应用和组合步骤通常是一起完成的。
在上一个示例中,我们首先显式选择了两个柱。如果不是,则 mean
方法应用于包含数字列的每一列:
In [9]: titanic.groupby("Sex").mean()
Out[9]:
PassengerId Survived Pclass Age SibSp Parch Fare
Sex
female 431.028662 0.742038 2.159236 27.915709 0.694268 0.649682 44.479818
male 454.147314 0.188908 2.389948 30.726645 0.429809 0.235702 25.523893
的平均值没有多大意义 Pclass
。如果我们只对每个性别的平均年龄感兴趣,列的选择(矩形括号 []
像往常一样)也支持分组的数据:
In [10]: titanic.groupby("Sex")["Age"].mean()
Out[10]:
Sex
female 27.915709
male 30.726645
Name: Age, dtype: float64
备注
这个 Pclass
列包含数字数据,但实际表示3个类别(或系数),分别具有标签“1”、“2”和“3”。计算这些数据没有多大意义。因此,Pandas提供了一种 Categorical
数据类型来处理此类型的数据。用户指南中提供了更多信息 分类数据 部分。
每种性别和舱位组合的平均票价是多少?
In [11]: titanic.groupby(["Sex", "Pclass"])["Fare"].mean() Out[11]: Sex Pclass female 1 106.125798 2 21.970121 3 16.118810 male 1 67.226127 2 19.741782 3 12.661633 Name: Fare, dtype: float64
可以同时按多列进行分组。将列名作为列表提供给
groupby()
方法。
上的用户指南部分提供了有关拆分-应用-合并方法的完整描述 groupby operations 。
按类别统计记录数#
每个舱位的乘客人数是多少?
In [12]: titanic["Pclass"].value_counts() Out[12]: 3 491 1 216 2 184 Name: Pclass, dtype: int64
这个
value_counts()
方法计算列中每个类别的记录数。
该函数是一种快捷方式,因为它实际上是一个GROUP BY操作,并结合计算每个组中的记录数:
In [13]: titanic.groupby("Pclass")["Pclass"].count()
Out[13]:
Pclass
1 216
2 184
3 491
Name: Pclass, dtype: int64
备注
两者都有 size
和 count
可以与组合使用 groupby
。鉴于 size
包括 NaN
值,并只提供行数(表的大小), count
排除缺少的值。在 value_counts
方法,请使用 dropna
参数来包括或排除 NaN
价值。
用户指南中有专门的部分介绍 value_counts
,请参阅上的页面 discretization 。
REMEMBER
可以对整列或整行计算聚合统计信息。
groupby
提供功能强大的 split-apply-combine 图案。value_counts
是统计变量每一类别中的条目数量的便捷快捷方式。
有关拆分-应用-合并方法的完整说明,请参阅关于 groupby operations 。