目录:
- 学习目标
- 排序函数
- sort_values函数
- rank函数
- 常用聚合函数
- corr函数计算数值列之间的相关性
- min函数计算最小值
- max函数计算最大值
- mean函数计算平均值
- std函数计算标准偏差
- quantile函数计算分位数
- sum函数求和
- count计算非空数据的个数
- 其他常用计算函数
- round改变浮点数的位数
- value_counts计算重复数据出现的次数
- 总结
- 项目地址
1.学习目标
-
知道排序函数sort_values和rank二者的区别和用法
-
知道Pandas中求和、计数、相关性值、最小、最大、平均数、标准偏差、分位数的函数使用
-
知道round、value_counts函数的作用
2.排序函数
-
sort_values 按指定列值排序
-
rank 返回列值的排序评分
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 为了演示效果random_state随机种子编号为16
df2 = df.sample(n=10, random_state=16)
print(df2)
sort_values函数
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 为了演示效果random_state随机种子编号为16
df2 = df.sample(n=10, random_state=16)
# 按GDP列的数值由小到大进行排序
df3 = df2.sort_values(['GDP'])
print(df3)
# 按GDP列的数值由大到小进行排序
# 倒序, ascending默认为True
df4 = df2.sort_values(['GDP'], ascending=False)
print(df4)
# 先对year年份进行由小到大排序,再对GDP由小到大排序
df5 = df2.sort_values(['year', 'GDP'])
print(df5)
df6 = df2['GDP'].sort_values()
print(df6)
# 由大到小 倒序
df7 = df2['GDP'].sort_values(ascending=False)
print(df7)
rank函数
-
rank函数用法:
DataFrame.rank()
或Series.rank()
-
rank函数返回值:以Series或者DataFrame的类型返回数据的排名(哪个类型调用返回哪个类型)
-
rank函数包含有6个参数:
-
axis:设置沿着哪个轴计算排名(0或者1),默认为0按纵轴计算排名
-
numeric_only:是否仅仅计算数字型的columns,默认为False
-
na_option:NaN值是否参与排序及如何排序,固定参数:
keep
,top
,bottom
-
keep: NaN值保留原有位置
-
top: NaN值全部放在前边
-
bottom: NaN值全部放在最后
-
-
ascending:设定升序排还是降序排,默认True升序
-
pct:是否以排名的百分比显示排名(所有排名与最大排名的百分比),默认False
-
method:排名评分的计算方式,固定值参数,常用固定值如下:
-
average : 默认值,排名评分不连续;数值相同的评分一致,都为平均值
-
min : 排名评分不连续;数值相同的评分一致,都为最小值
-
max : 排名评分不连续;数值相同的评分一致,都为最大值
-
dense : 排名评分是连续的;数值相同的评分一致
-
-
-
df.rank(ascending=False)
返回原df对应的评分df,评分默认由小到大,且存在相同评分
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 为了演示效果random_state随机种子编号为16
df2 = df.sample(n=10, random_state=16)
print(df2)
df3 = df2.rank()
print(df3)
df4 = df2.rank(axis=0)
print(df4)
# 只对数值类型的列进行统计
df5 = df2.rank(numeric_only=True)
print(df5)
# 降序
df6 = df2.rank(ascending=False)
print(df6)
# 以最高分作为1,放回百分数形式的评分,pct参数默认为False
df7 = df2.rank(pct=True)
print(df7)
-
method参数的用法
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 为了演示效果random_state随机种子编号为16
df2 = df.sample(n=10, random_state=16)
print(df2)
df3 = df2.rank(method='average')
print(df3)
df4 = df2.rank(method='min')
print(df4)
df5 = df2.rank(method='max')
print(df5)
df6 = df2.rank(method='dense')
print(df6)
-
s.rank()
的用法和df.rank()
用法一致,只是返回Series对象
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 为了演示效果random_state随机种子编号为16
df2 = df.sample(n=10, random_state=16)
print(df2)
df3 = df2['year']
print(type(df3))
df4 = df2['year'].rank()
print(df4)
df5 = df2['year'].rank(axis=0)
print(df5)
df6 = df2['year'].rank(numeric_only=True) # 只对数值类型的列进行统计
print(df6)
df7 = df2['year'].rank(ascending=False) # 降序
print(df7)
df8 = df2['year'].rank(pct=True) # 以最高分作为1,放回百分数形式的评分,pct参数默认为False
print(df8)
# method参数
df9 = df2['year'].rank(method='average')
print(df9)
df10 = df2['year'].rank(method='min')
print(df10)
df11 = df2['year'].rank(method='max')
print(df11)
df12 = df2['year'].rank(method='dense')
print(df12)
3.常用聚合函数
常用聚合函数有:
-
corr 相关性
-
min 最小值
-
max 最大值
-
mean 平均值
-
std 标准偏差
-
quantile 分位数
corr函数计算数值列之间的相关性
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 获取全部中国的数据,1960-2019中国的GDP
df3 = df.query('country=="中国"')
print(df3)
# 用drop方法移除'country'列
df4 = df3.drop(columns='country')
print(df4)
# 计算相关性
df5 = df4.corr()
print(df5)
# 构造2020-2019年份列表
year_list_str = [year for year in range(2000, 2020)]
# 拼接query查询参数字符串
query_str = 'year in {}'.format(year_list_str)
# 查询返回2020-2019年中国的GDP数据集
df6 = df4.query(query_str)
df7 = df6.head()
print(df7)
# 计算相关性
df8 = df6.corr()
print(df8)
返回结果依次如下 :
- 相关性得分为1的表示100%相关,越接近1说明相关性越高;year列越大,GDP越大,这是正相关
-
1960年-2019年,随着年份的增长,中国GDP整体基本呈现正增长趋势,year列和GDP列的相关性为0.766
-
2000年-2019年,随着年份的增长,中国GDP整体完全呈现正增长趋势,year列和GDP列的相关性为0.983,非常高的正相关性
-
再来看一个高度负相关的例子
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 构造2001-2023年份列表
year_list_str = [year for year in range(2001, 2004)]
# 拼接query查询参数字符串
query_str = 'country=="{}" and year in {}'.format('委内瑞拉', year_list_str)
df4 = df.query(query_str)
# 委内瑞拉2001-2003三年GDP数据
print(df4)
# 计算相关性
df5 = df4.drop(columns='country')
df6 = df5.corr()
print(df6)
返回结果依次如下 :
- 委内瑞拉2001-2003连续三年GDP萎缩(注意不是负增长),年份和GDP呈现高度的负相关,相关计算结果为
负0.956
——year越大,GDP越小
min函数计算最小值
-
df.min()
会返回df中每一列的最小值构成的Series
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.sample(n=10, random_state=16)
print(df2)
df3 = df2.min()
print(df3)
-
series.min()
返回s对象中的最小值
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.sample(n=10, random_state=16)
print(df2)
df3 = df2['year'].min()
print(df3)
max函数计算最大值
-
max函数计算最大值,用法和min函数的用法一致
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.sample(n=10, random_state=16)
print(df2)
df3 = df2.max()
print(df3)
df4 = df2['year'].max()
print(df4)
mean函数计算平均值
-
mean函数计算平均值,用法和min函数的用法一致,但只会对数值类型的数据进行计算
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.sample(n=10, random_state=16)
print(df2)
df2 = df2.drop(columns='country')
print(df2)
df3 = df2.mean()
print(df3)
df4 = df2['year'].mean()
print(df4)
df5 = df2['GDP'].mean()
print(df5)
std函数计算标准偏差
- 标准偏差:用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.sample(n=10, random_state=16)
print(df2)
df2 = df2.drop(columns='country')
print(df2)
df3 = df2.std()
print(df3)
df4 = df2['GDP'].std()
print(df4)
quantile函数计算分位数
-
分位数(Quantile),亦称分位点,常用的有中位数(即二分位数)、四分位数、百分位数等;那什么是分位数呢?我们以中位数为例:通过把一堆数字按大小排序后找出正中间的一个数字作为中位数,如果这一堆数字有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数,即二分位数。
-
quantile函数默认返回二分位数;可以通过传入参数来控制返回的四分位数,或其他分位数
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.sample(n=10, random_state=16)
print(df2)
df2 = df2.drop(columns='country')
print(df2)
# 50%分位数
df3 = df2.quantile()
print(df3)
df4 = df2['year'].quantile()
print(df4)
# 返回四分位数
df5 = df2.quantile([0.25, 0.5, 0.75])
print(df5)
df6 = df2['year'].quantile([0.25, 0.5, 0.75])
print(df6)
# 返回三分位数
df7 = df2.quantile([1 / 3, 2 / 3])
print(df7)
df8 = df2['year'].quantile([1 / 3, 2 / 3])
print(df8)
sum函数求和
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
df2 = df.sample(n=10, random_state=16)
print(df2)
df2 = df2.drop(columns='country')
print(df2)
df3 = df2.sum()
print(df3)
df4 = df2['year'].sum()
print(df4)
count计算非空数据的个数
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 构造带空值的数据集
df6 = df.tail()
print(df6)
df6.loc[9929, 'GDP'] = None
print(df6)
print(df6.count())
print(df6['GDP'].count())
4.其他常用计算函数
-
df['列'].value_counts() 计算累计次数
-
小数类型控制位数 df['列'].round(2)
round改变浮点数的位数
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 构造数据集
df7 = df.query('country=="中国" & year in [2016, 2017, 2018, 2019]').copy()
df7['GDP万亿元'] = df7['GDP'] / 1000000000000
print(df7)
# 改变df或series中浮点数的小数位数
print(df7.round(2))
print(df7['GDP万亿元'].round(3))
value_counts计算重复数据出现的次数
import pandas as pd
# 加载csv数据,指定gbk编码格式来读取文件,返回df
df = pd.read_csv('../datas/data_set/1960-2019全球GDP数据.csv', encoding='gbk')
# 构造数据集
df7 = df.query('country=="中国" & year in [2016, 2017, 2018, 2019]').copy()
df7['GDP万亿元'] = df7['GDP'] / 1000000000000
print(df7)
print(df7.value_counts())
print(df7['country'].value_counts())
5.总结
-
排序
-
sort_values函数 按值排序
-
rank函数 返回安置排序的序号
-
-
聚合函数
-
df.corr函数 相关性计算
-
min函数 计算最小值
-
max函数 计算最大值
-
mean函数 计算平均值
-
std函数 计算标准偏差
-
quantile函数 计算分位数
-
sum函数 计算所有数值的和
-
count函数 计算非空数据的个数
-
-
其他计算函数
-
round(n)函数 改变浮点数的小数位数为n
-
value_counts函数 计算不同的数据出现的次数
-