pandas实现多个excel合并统计

pandas实现多个excel合并统计

  • 简述
  • 案例说明
  • pandas环境
  • 完整示例
    • 第一步 打开excel文件
    • 第二步 合并sheet
    • 第三步 统计各类型商品销售额,生成excel文件
    • 第四步 合并两列单元格
  • 总结

简述

Pandas是python一款用于数据分析处理的优秀工具,掌握简单的使用方法,可以减少我们很多的工作时间,本篇主要介绍pandas对excel的读写,以及简单的合并统计,下一章会为大家介绍Pandas的简单绘图。

案例说明

需求:

  1. 将两个sheet文件合并为一个,生成新excel文件
  2. 统计两天各类型商品的销售额,生成新excel文件
  3. 将相同名称但不同价格的商品汇总(合并单元格),生成新excel文件

数据文件:
pandas实现多个excel合并统计_第1张图片pandas实现多个excel合并统计_第2张图片
pandas实现多个excel合并统计_第3张图片

pandas环境

这里默认你已经安装好了pandas环境,也就是import pandas as pd 没有报错
如果你没有pandas环境,网上有很多优秀教程,其实很简单,只需要python环境下的pip install pandas就行了

完整示例

第一步 打开excel文件

第一步是最简单的一步,但也是用的最多的一步,大家主要记住几个常用的参数。

import pandas as pd 
import matplotlib.pyplot as plt
data = pd.read_excel('E:/data/myfile/商品销售信息表.xlsx',encoding='windows-1252',
                        sheetname=None,
                        header=1,
                        skip_footer=1
                    )

参数1:文件路径
参数2: sheetname,默认为0,表示sheet的下标索引,设置为None表示打开所有 Sheet,若要打开指定的sheet,
可传入下标数组, 如sheetname=[0,1,6,8]
参数3:header,标题所在的行数,若不设置,默认第一行为标题(header=0),本例中标题在第二行,所以header=1
参数4:skip_footer,底部跳过多少行,本例中底部有一行多余数据,故skip_footer=1

data返回的是一个dataframe集合,类似Dictionary
可以这样输出:data[‘商品销售信息表0714’] 或 data[‘商品销售信息表0715’]
pandas实现多个excel合并统计_第4张图片

第二步 合并sheet

合并sheet要用到concat函数,根据表头进行合并,代码如下:

import pandas as pd 
import matplotlib.pyplot as plt
data = pd.read_excel('E:/data/myfile/商品销售信息表.xlsx',encoding='windows-1252',
                        sheetname=None,
                        header=1,
                        skip_footer=1
                    )


df_all = pd.concat([data['商品销售信息表0714'],data['商品销售信息表0715']],axis=0)

concat 的两个参数:
第一个参数 是要合并的dataframe对象数组,也就是sheet集合
第二个参数 可以省略,代表合并的方向,默认是0,表示纵向合并;

合并的对象
pandas实现多个excel合并统计_第5张图片

第三步 统计各类型商品销售额,生成excel文件

其实从统计学的角度来说,这一步之前应该是数据清洗,处理掉空值异常值,这里暂时不做说明。
Pandas对数据的统计处理,主要使用 groupby 函数,熟悉sql的朋友应该不会陌生,也就是分组统计

import pandas as pd 
import matplotlib.pyplot as plt
data = pd.read_excel('E:/data/myfile/商品销售信息表.xlsx',encoding='windows-1252',
                        sheetname=None,
                        header=1,
                        skip_footer=1
                    )
df_all = pd.concat([data['商品销售信息表0714'],data['商品销售信息表0715']],axis=0)
df_type = df_all.groupby(['商品名','价格']).sum()
df_result = df_type.reset_index()

pandas实现多个excel合并统计_第6张图片
groupby 会把所有的数字列全部汇总,如需过滤,可使用 df_result [{‘商品名’,’价格’,‘数量’,‘总价’}] 进行过滤
pandas实现多个excel合并统计_第7张图片
按照 商品-价格 分类汇总,这里调用 reset_index() 方法,让结果看起来更直接一些。
生成excel:

df_result.to_excel('E:/dat/myfile/分类统计各类型商品销售额.xlsx')

pandas实现多个excel合并统计_第8张图片

第四步 合并两列单元格

合并两列单元格的思路,是生成一列新的单元格

import pandas as pd 
import matplotlib.pyplot as plt
data = pd.read_excel('E:/data/myfile/商品销售信息表.xlsx',encoding='windows-1252',
                        sheetname=None,
                        header=1,
                        skip_footer=1
                    )

df_all = pd.concat([data['商品销售信息表0714'],data['商品销售信息表0715']],axis=0)
df_all['商品-价格'] = df_all['商品名'] +  '-' + df_all['价格'].map(str)

输出df_all:
pandas实现多个excel合并统计_第9张图片
选择需要保存的列:

df_result = df_type[{'商品-价格','数量','总价'}]
df_result.to_excel('E:/data/myfile/合并_商品销售信息表.xlsx')

pandas实现多个excel合并统计_第10张图片
pandas实现多个excel合并统计_第11张图片

总结

示例相对比较简单,在实际运用中可能遇到的问题会比较复杂,希望大家可以一起交流学习,这是一个知识大爆炸的年代,大到终身学习也未必学得完,只有不断的交流合作,才能保持自己的进步。

你可能感兴趣的:(pandas实现多个excel合并统计)