参考资料:活用pandas库
1、分组方式
我们可以把分组计算看作“分割-应用-组合”(split-apply-combine)的过程。首先把数据分割成若干部分,然后把选择的函数(或计算)应用于各部分,最后把所有独立的分割计算组合成一个DataFrame。在pandas中可以使用DataFrame的groupby方法完成分组/聚合计算。
# 导入库
import pandas as pd
# 默认情况下,read_csv函数会读取逗号分隔文件
# Gapminder数据使用制表符分隔
# 可以吧sep参数设置为\t,显示指明使用制表符分隔
df=pd.read_csv(r"...\data\gapminder.tsv",sep="\t")
# 调用head()方法,默认显示前5行
print(df.head())
# 数据中买年的平均与其寿命是多少?
# 为了回答这个问题,需要先对数据按照年份进行分割,
# 然后获取lifeExp列,计算平均值
group_year_df=df.groupby("year")
print(type(group_year_df))
group_year_df_lifeExp=group_year_df["lifeExp"]
print(type(group_year_df_lifeExp))
print(group_year_df_lifeExp.mean())
如果想使用多个变量对数据进行分组和分层,或想对多列执行相同的计算,我们可以使用列表来实现。如下:针对每个“年份-洲”对,计算响应的平均预期寿命和平均GDP。
# 在python中,可以使用反斜杠把一个长行分割为多行
# 下面两个语句是相同的
# 语句1
df.groupby(["year","continent"])[['lifeExp','gdpPercap']].mean()
# 语句2
df.groupby(["year","continent"])\
[['lifeExp','gdpPercap']].\
mean()
如果想平铺DataFrame,可以使用reset_index方法。
multi_group_var=df.groupby(["year","continent"])[['lifeExp','gdpPercap']].mean()
flat=multi_group_var.reset_index()
print(flat.head(15))
2、分组频率计数
我们可以使用nunique方法或value_counts方法来获取唯一值计数和频率计数。
# 使用nunique()方法计算Series中唯一值的数目(去重统计)
print(df.groupby("continent")["country"].nunique())
# 使用value_counts()方法计算Series中的频率
print(df.groupby("continent")["country"].value_counts())
3、基本绘图
可视化在数据处理的每个步骤都很重要。在理解或清理数据时,可视化有助于识别数据中的趋势,并展示最终的发现。
# 查看世界人口各年度的预期寿命
global_yearly_life_exp=df.groupby("year")["lifeExp"].mean()
print(global_yearly_life_exp)
global_yearly_life_exp.plot()