在使用python进行朝阳医院2018年药品销售前10的数据提取时出现了
AttributeError: 'tuple' object has no attribute 'sum'
#聚合统计各种药品数量 medicine = groupDF[['商品名称','销售数量']] bk = medicine.groupby('商品名称')[['销售数量']] re_medicine = bk.sum()
由于我是在练中学,所以并不清楚这是个什么作用的代码,但一路抄过来也明白这是一个类似于sql中提取需要的数据(商品名称和销售数量),进行汇总的过程(相同的药品销售数量相加起来总和就是单一药品的销售总量)。
所以我解决问题的方法遵循如下步骤:
1、每行代码独立运行,看所产生的数据是什么,数据格式,以及整个列表的一个格式
所以我运行了第一行
print(meidicine)
并且同时查到了这种代码是pandas中的标签索引,使用[[]]把所需要的信息提取出来
商品名称 销售数量
销售时间
2018-01-01 强力VC银翘片 6.0
2018-01-01 硝苯地平片(心痛定) 2.0
2018-01-01 非洛地平缓释片(波依定) 5.0
2018-01-01 硝苯地平控释片(欣然) 6.0
2018-01-01 缬沙坦分散片(易达乐) 1.0
这里可以看到不光出现了商品名称和销售数量销售时间也出现了,虽然不知道为何,但是我们确实需要销售时间来将销售相同数量的相同商品区分开来。而这一步骤也是汇总每种药品销售数量的必经之路。
我们来到第二行
print(bk)
(<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000293B1A1C8E0>, [['销售数量']])
看不懂了,这个时候由第三行代码回推 ,由于第三行使用sum 产生的结果是每个商品的总销量
假设第一步得到的数据如下
2018-01-01 强力VC银翘片 6.0
2018-01-01 硝苯地平片(心痛定) 2.0
2018-01-02 强力VC银翘片 5.0
2018-01-02 硝苯地平片(心痛定) 6.0
暂时不考虑排序的问题我们想要通过第二部第三部得到
强力VC银翘片 6.0+5.0
硝苯地平片(心痛定) 2.0+6.0
所以我猜第二步的作用是......
猜不出来
换种思路
而所报的bug有两种可能
1、第二步产生的数据格式不对
2、第三步使用的sum有问题
我们挨个来看
groupby()[[]]
在网上搜到
顺便学了一波语法糖是什么
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
并且知道这是对列进行聚合或许我需要把商品名称相同的行的销售数量进行聚合。
好了我发现我没注意在groupby()[[]]中间加了一个多余的逗号,气死我了。
不过好在整个过程中我缩小了问题的范围最后发现了问题所在,还学了一波groupby