当前位置: 首页 > 科技观察

一行pandas代码做一个数据分析的数据透视表,厉害了!

时间:2023-03-16 23:46:13 科技观察

导入模块和读取数据。我们的第一步仍然是导入模块和读取数据。数据集是北美咖啡的销售数据,包括咖啡品种、销售区域、销售利润和成本、销量。和日期等importpandasaspddefload_data():returnpd.read_csv('coffee_sales.csv',parse_dates=['order_date'])这里小编把读取到的数据封装成一个自定义函数,读者也可以根据让自己习惯阅读数据。df=load_data()df.head()输出首先通过调用info()函数对数据集有一个大致的了解。df.info()outputRangeIndex:4248entries,0to4247Datacolumns(total9columns):#ColumnNon-NullCountDtype-----------------------------0order_date4248非空datetime64[ns]1市场4248非空对象2区域4248非空对象3产品类别4248非空对象4product4248non-nullobject5cost4248non-nullint646inventory4248non-nullint647net_profit4248non-nullint648sales4248non-nullint64dtypes:datetime64[ns](1),int64(4),object(4)内存占用:298.8+KB初体验pivot_table函数中最重要的四个参数是index、values、columns和aggfunc。每个数据透视表都必须有一个索引。比如我们要查看每个地区咖啡的销售数据,就设置“地区”为索引。df.pivot_table(index='region')output当然我们也可以更详细的查看各个地区不同咖啡种类的销售数据,所以我们在索引中引用“region”和“product_category”,代码为如下:df.pivot_table(index=['region','product_category'])输出进阶操作上面的案例中,我们以区域“region”为索引,查看各项销售指标,包括成本、库存、净利润而对于sales这四个指标的数据,如果我们要单独看某个指标,代码如下:df.pivot_table(index=['region'],values=['sales'])outputthis也就是我们上面说的价值观。上面的案例,我们单挑出“销售额”这个指标,或者我们要看净利润。代码如下:df.pivot_table(index=['region'],values=['net_profit'])output另外,我们还提到了aggfunc,它可以设置我们对数据聚合进行的函数运算。通常,默认是计算平均值。这里我们也可以指定,比如计算total。df.pivot_table(index=['region'],values=['sales'],aggfunc='sum')输出或者我们也可以这样写。df.pivot_table(index=['region'],values=['sales'],aggfunc={'sales':'sum'})当然如果我们觉得只有一个聚合函数可能不够用,我们可以添加更多的个人。df.pivot_table(index=['region'],values=['sales'],aggfunc=['sum','count'])输出留下最后一个关键参数列类似于之前提到的索引设置字段列级别,当然不是必须的参数,例如:df.pivot_table(index=['region'],values=['sales'],aggfunc='sum',columns=['product_category'])output在“列”方向代表的是每款咖啡在各个地区的销量总和。如果我们不调用columns参数,而是将其作为index索引,代码如下:df.pivot_table(index=['region','product_category'],values=['sales'],aggfunc='sum')输出同时我们看到有一些缺失值,我们可以选择替换这些缺失值。df.pivot_table(index=['region','product_category'],values=['sales'],aggfunc='sum')output熟能生巧我们再做几个练习,我们想知道除了sales还有什么每个地区每种咖啡的成本是多少?我们向值添加一个“成本”字段。代码如下:df.pivot_table(index=['region'],values=['sales','cost'],aggfunc='sum',columns=['product_category'],fill_value=0)输出在同时,我们也可以通过调用保证金参数来计算总金额。df.pivot_table(index=['region','product_category'],values=['sales','cost'],aggfunc='sum',fill_value=0,margins=True)output最后,我们调用pivot_table函数来做一份2010年咖啡销量的销售报表,代码如下:month_gp=pd.Grouper(key='order_date',freq='M')cond=df["order_date"].dt.year==2010df[cond].pivot_table(index=['region','product_category'],columns=[month_gp],values=['sales'],aggfunc=['sum'])输出

猜你喜欢