Pandas(二)描述统计

 一、描述与统计

1.查看基本统计值

有时候我们获取到数据之后,想要查看下数据的简单统计指标(最大值、最小值、平均值、中位数等),比如想要查看年龄的最大值,如何实现呢?

直接对 age 这一列调用 max方法即可。类似的,通过调用 min、mean、quantile、sum 方法可以实现最小值、平均值、中位数以及求和。可以看到,对一个 Series 调用 这几个方法之后,返回的都只是一个聚合结果。

#函数
np.max(user_info.年龄)

#方法
user_info.年龄.mean()

如果想要获取更多的统计方法,可以参见官方链接:Descriptive statistics (http://pandas.pydata.org/pandas-docs/stable/basics.html#descriptive-statistics)

虽然说常见的各种统计值都有对应的方法,如果我想要得到多个指标的话,就需要调用多次方法,是不是显得有点麻烦呢?Pandas 设计者自然也考虑到了这个问题,想要一次性获取多个统计指标,只需调用 describe 方法即可。

# 只支持数值列
user_info.describe()

可以看到,直接调用 describe 方法后,会显示出数字类型的列的一些统计指标,如 总数、平均数、标准差、最小值、最大值、25%/50%/75% 分位数。

如果想要查看非数字类型的列的统计指标,可以设置 include=["object"] 来获得。

user_info.describe(include=["float64"])

2.统计下某列中每个值出现的次数value_counts

user_info['中青年'].value_counts()

user_info.性别.value_counts()

这个非常重要,后面会经常用到。

3.离散化

有时候,我们会碰到这样的需求,想要将年龄进行离散化(分桶),直白来说就是将年龄分成几个区间,这里我们想要将年龄分成 3 个区间段。就可以使用 Pandas 的 cut 方法来完成。

# bins 整数,代表了均匀切分,等宽分箱
pd.cut(grade.语文,3)

 
 

#有时候离散化之后,想要给每个区间起个名字,可以指定 labels 参数
pd.cut(grade.语文,3,labels=['低分','中等','高分'])

扫描二维码关注公众号,回复: 7472914 查看本文章

可以看到, cut 自动生成了等距的离散区间,如果自己想定义也是没问题的。

# bins 如果是一个序列, 代表指定切分位置
# 0-60   60 - 100  100 - 150
# right = False  代表左侧闭区间 ,右侧开区间
pd.cut(grade.数学 , [-1 , 60 , 100, 151] , right =False )

除了可以使用 cut 进行离散化之外,qcut 也可以实现离散化。cut 是根据每个值的大小来进行离散化的,qcut 是根据每个值出现的次数来进行离散化的。有时候等宽分箱,当样本分布不是很均匀的时候,结果不是很好,换成等深分箱,这样切分出的样本数是差不多的。

# pd.qcut 等深分箱  , 保证分箱之后的区间中样本个数大体相等
pd.qcut(grade.语文, 3)
pd.qcut(grade.语文, 3).value_counts()

4.排序功能

在进行数据分析时,少不了进行数据排序。Pandas 支持两种排序方式:按轴(索引或列)排序和按实际值排序。

1)按索引排序

sort_index 方法默认是按照索引进行正序排的。

2)按值排序

如果想要实现按照实际值来排序,例如想要按照年龄排序,如何实现呢?

使用 sort_values 方法,设置参数 by="***" 即可。

# 降序排序
eng.sort_values(ascending=False)
# 按照英语进行排序
grade.sort_values(by = '英语' , ascending=False)

有时候我们可能需要按照多个值来排序,例如:按照年龄和城市来一起排序,可以设置参数 by 为一个 list 即可。注意:list 中每个元素的顺序会影响排序优先级的.

# 按照英语进行排序 , 英语分数相同的, 以数学进行排序
grade.sort_values(by =[ '英语', '数学'] , ascending=False)

二、函数应用

Pandas 不需要很多的逻辑思考,英文看懂,明白参数设置,用到的时候会查就行了。

猜你喜欢

转载自www.cnblogs.com/BC10/p/11683570.html