python数据分析性能提升之避免使用pd.Series的value_counts()

62 篇文章 5 订阅
10 篇文章 1 订阅

       在数据分析时,当我们需要统计一个数据集中的元素的出现次数时,对于pandas中的Series对象,直接有value_counts函数,会直接返回一个以元素为索引,出现次数为值的Series,如下图所示。

       问题在于,如果数据集较大,而且其中的元素也不是int或者float等简单的对象,例如是列表、元组等对象,那么利用Series的value_counts对象是非常低效的,笔者试了一个由25000个列表组成的Series,用value_counts函数去计算,结果就卡死了。对此,我们可以用numpy的unique方法。

       numpy.unique(arrreturn_index=Falsereturn_inverse=Falsereturn_counts=Falseaxis=None)函数中,arr表示传入的ndarray,axis参数可以指定沿着哪个轴的元素进行对比,返回唯一的元素array对象unique,return_index如果为True,还会返回唯一值的元素第一次出现在ndarray中的索引;return_inverse为True的话,会返回原ndarray所有元素在返回的unique对象中的索引位置,此时可以通过unique[indices]进行重构原来的ndarray;如果return_counts为True,会返回每个元素出现的次数。如下所示。

       因此,相比于Series的value_counts()函数,numpy.unique()函数可以让我们得到更多的信息,重点在于,numpy.unique函数的速度很快,对于之前的25000个列表组成的array,调用该函数在瞬间便可以返回结果。

       如果数据集中的元素都是hashable的,通俗的讲就是不可变的,那么还可以利用python标准库collections中的Counter类来统计元素出现的次数,如下所示。返回一个Counter对象,可以以字典的方式查看元素的出现次数,还有一些方法可以进一步查看其性质,比如利用most_common([n])方法查看出现最频繁的前n个元素以及对应的次数,默认全部显示,并按出现次数从大到小排序。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值