[黑马程序员Pandas教程]——Pandas常用计算函数

目录:

  1. 学习目标
  2. 排序函数
    1. sort_values函数
    2. rank函数
  3. 常用聚合函数
    1. corr函数计算数值列之间的相关性
    2. min函数计算最小值
    3. max函数计算最大值
    4. mean函数计算平均值
    5. std函数计算标准偏差
    6. quantile函数计算分位数
    7. sum函数求和
    8. count计算非空数据的个数
  4. 其他常用计算函数
    1. round改变浮点数的位数
    2. value_counts计算重复数据出现的次数
  5. 总结
  6. 项目地址

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值是否参与排序及如何排序,固定参数:keeptopbottom

      • 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函数 计算不同的数据出现的次数

6.项目地址

Python: 66666666666666 - Gitee.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿瞒有我良计15

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值