Loading... ## pandas学习笔记2--学选考之groupby以及统计 [http://blog.a152.top/usr/uploads/2022/02/2310593737.html](http://blog.a152.top/usr/uploads/2022/02/2310593737.html "http://blog.a152.top/usr/uploads/2022/02/2310593737.html") html格式文件 [http://blog.a152.top/usr/uploads/2022/02/524256903.csv](http://blog.a152.top/usr/uploads/2022/02/524256903.csv "http://blog.a152.top/usr/uploads/2022/02/524256903.csv") [http://blog.a152.top/usr/uploads/2022/02/1857146981.ipynb](http://blog.a152.top/usr/uploads/2022/02/1857146981.ipynb "http://blog.a152.top/usr/uploads/2022/02/1857146981.ipynb") ipynb格式文件 ### 导入pandas ```python import pandas as pd ``` ```python df=pd.read_csv('分词统计.csv') df ``` | ``word | id | count | | ------ | -------- | --------------------- | | 0 | a | APW_ENG_20100101.0001 | | 1 | about | APW_ENG_20100101.0001 | | 2 | abuse | APW_ENG_20100101.0001 | | 3 | academy | APW_ENG_20100101.0001 | | 4 | accused | APW_ENG_20100101.0001 | | ... | ... | ... | | 524173 | tortured | APW_ENG_20100107.1067 | | 524174 | us | APW_ENG_20100107.1067 | | 524175 | video | APW_ENG_20100107.1067 | | 524176 | who | APW_ENG_20100107.1067 | | 524177 | world | APW_ENG_20100107.1067 | 524178 rows × 3 columns ### 数据说明 这个是熬夜的时候遇到的一个人求助的一个pandas统计词数的一个问题 所以作为一个还算可以的例子呈现一下pandas的用法 现在的csv是我经过整理过的,原本他是用的json储存,但是也并不符合json格式,而是一个个字典,在一波清洗之后整理而成,并且,原本的词是分两种:正文和标题,他是分开的,我把他合并了 #### 他的问题是,要统计每个词在在么多文件中,有多少文件有这个词,以及一共这个词有多少次 这里简单介绍一下之前的工作: 读取json利用字符串向量化规范数据,看起来是个正常的表 原文件有四列 ['id','type','word','count'] 分别是 文件名,类型(正文,标题) 词 计数 ```python def f(x): return x.groupby('word')['count'].sum() df.groupby('id').apply(f) ``` 如果直接count统计会出现重复,比如一个文件title和body都有这个词,将会重复计数 经过调用groupby 之后apply进行再次分组 相当于想把文件名的归为一类,之后相同word的归为一类 这样就统计出了一张有**层级索引**的表 之后经过拆索引,加上了两列 成了这张表 ['word','id','count'] 这张表的word是有重复值的,因为对应的文件名不同 所以还要获得 有多少文件有这个词,以及一共这个词有多少次 就需要再次groupby ```python df.groupby('word').agg({'id':'count','count':'sum'}) ``` 有点懵? 因为agg是一个聚合函数,{'id':'count','count':'sum'} 表示id列使用count计数, count列使用sum求和 作为高中生,我们其实更应该这样写 ```python df.groupby('word').id.count() ``` ``` word a 2571 aaaar 1 aafter 1 aamir 2 aardvarks 1 ... zurich 13 zuzulova 2 zverev 12 zvornik 1 zwolle 2 Name: id, Length: 27554, dtype: int64 ``` ```python df.groupby('word').count.sum() ``` ``` --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-9-ba5f0cc002cf> in <module> ----> 1 df.groupby('word').count.sum() AttributeError: 'function' object has no attribute 'sum' ``` 看吧,这个就是这样写的坏处!! ```python df.groupby('word')['count'].sum() ``` ``` word a 23383 aaaar 1 aafter 1 aamir 4 aardvarks 1 ... zurich 13 zuzulova 2 zverev 12 zvornik 1 zwolle 4 Name: count, Length: 27554, dtype: int64 ``` Last modification:February 5, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 4 如果觉得我的内容对你有用,请随意赞赏