pandas处理双周数据

这篇具有很好参考价值的文章主要介绍了pandas处理双周数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

处理文件题头格式

部门名称	年度名称	季节名称	商品名称	商品代码	品牌名称	品类名称	颜色名称	商店名称	0M	1L	1XL	27	28	29	2XL	30	31	32	33	3XL	4XL	5XL	6XL	S	均

1.导入包

导入源

pip install openpyxl -i https://pypi.doubanio.com/simple
pip install pandas -i https://pypi.doubanio.com/simple
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl import styles
from openpyxl.styles import *
import pandas as pd
import string
import re
import os

2读入数据

	filePath1 = './src/本周销售明细.xlsx'
	filePath2 = './src/上周销售明细.xlsx'
    # 加载工作簿
    wb = load_workbook(filePath1)
    # 获取sheet页,修改第一个sheet页面为
    name1 = wb.sheetnames[0]
    ws1 = wb[name1]
    ws1.title = "销售明细"
    wb.save(filePath1)
    
    # 销售明细
    df0 = pd.read_excel(filePath1, sheet_name='销售明细')

合并两列数据文章来源地址https://www.toymoban.com/news/detail-767321.html

pd.merge(df1, #要合并的左表
         df2, #要合并的右表
         how = 'outer',#合并的方式:inner-内连接,outer--全外连接,left--左外连接,right--右外连接,外连接的时候,没有数据的地方会填充为NaN,默认为inner。
         on=None,
#默认为None,合并的根据,要写出两个DataFrame共有的列,注意一定要是列名相同的,否则会报错,为list类型(多个列)或str(一列)
#如:['name']或者'name',默认None的时候,merge会自动寻找相同列名的列。
         left_on=None,
         right_on=None,
#当两表连接的根据列名字不一样的时候,用left on和right on列出两表连接的根据列,数值类型和on一样,默认None,比如df1和df3合并就需要用到left_on = 'name',right_on = '名字'。
         left_index = False,
         right_index = False,
#当进行连接的两表没有共同的根据列的时候,可以使用行索引进行合并,将left_index和right_index都设置为True即可,默认为False
         sort = True) #根据连接用的列进行排序,默认为False

数据预处理

	file_path1 = './src/本周销售明细.xlsx'
    file_path2 = './src/上周销售明细.xlsx'
    #修改工作簿表名为销售明细
    sheet_name_deal(file_path1)
    sheet_name_deal(file_path2)
    file_path3 = './src/本周销售明细精修.xlsx'
    file_path4 = './src/上周销售明细精修.xlsx'
    creat_excel(file_path3)
    creat_excel(file_path4)
    #计算合计
    index_list = ['部门名称', '年度名称', '季节名称', '商品代码', '商品名称', '品牌名称', '品类名称', '颜色名称', '商店名称']
    value_list = ['0M', '1L', '1XL', '27', '28', '29', '2XL', '30', '3XL', '4XL', '5XL', '6XL', 'S', '均', '合计']
    #读入数据
    df1 = pd.read_excel(file_path1, sheet_name='销售明细')
    df2 = pd.read_excel(file_path2, sheet_name='销售明细')
    # 求和,需将文本的列指定为索引
    df1 = df1.set_index(index_list)
    # df1.loc["按列求和"] = df1.apply(lambda x: x.sum())
    df1['合计'] = df1.apply(lambda x: x.sum(), axis=1)
    # 求和,需将文本的列指定为索引
    df2 = df2.set_index(index_list)
    # df1.loc["按列求和"] = df1.apply(lambda x: x.sum())
    df2['合计'] = df2.apply(lambda x: x.sum(), axis=1)

    # 重置索引,防止导出excel列索引时单元格合并
    df1 = df1.reset_index()
    df2 = df2.reset_index()
    # 将生成的工作表导入到程序中
    result_sheet = pd.ExcelWriter(file_path3, engine='openpyxl')  # 先定义要存入的文件名xxx,然后分别存入xxx下不同的sheet
    # df1将0转变为空
    df1 = df1.replace(0, '')
    df1.to_excel(result_sheet, "销售明细", index=False, na_rep=0, inf_rep=0)
    # 这步不能省,否则不生成文件
    result_sheet._save()
    # 将生成的工作表导入到程序中
    result_sheet = pd.ExcelWriter(file_path4, engine='openpyxl')  # 先定义要存入的文件名xxx,然后分别存入xxx下不同的sheet
    # df1将0转变为空
    df2.to_excel(result_sheet, "销售明细", index=False, na_rep=0, inf_rep=0)
    # 这步不能省,否则不生成文件
    result_sheet._save()

完整代码

from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl import styles
from openpyxl.styles import *
import pandas as pd
import string
import re
import os
# Press the green button in the gutter to run the script.


def sheet_name_deal(file_path):
    wb = load_workbook(file_path)
    # 获取sheet页,修改第一个sheet页面名为销售明细
    name1 = wb.sheetnames[0]
    ws1 = wb[name1]
    ws1.title = "销售明细"
    wb.save(file_path)


def creat_excel(file_path):
    # 没有就创建
    if os.path.exists(file_path):
        print("文件已存在")
        print(file_path)
    else:
        # 创建一个新的 Excel 文件
        wb = Workbook()
        wb.save(file_path)


def pretreatment():
    file_path1 = './src/本周销售明细.xlsx'
    file_path2 = './src/上周销售明细.xlsx'
    # 修改工作簿表名为销售明细
    sheet_name_deal(file_path1)
    sheet_name_deal(file_path2)
    file_path3 = './src/本周销售明细精修.xlsx'
    file_path4 = './src/上周销售明细精修.xlsx'
    creat_excel(file_path3)
    creat_excel(file_path4)
    # 计算合计
    index_list = ['部门名称', '年度名称', '季节名称', '商品代码', '商品名称', '品牌名称', '品类名称', '颜色名称', '商店名称']
    value_list = ['0M', '1L', '1XL', '27', '28', '29', '2XL', '30', '3XL', '4XL', '5XL', '6XL', 'S', '均', '合计']
    # 读入数据
    df1 = pd.read_excel(file_path1, sheet_name='销售明细')
    df2 = pd.read_excel(file_path2, sheet_name='销售明细')
    # 求和,需将文本的列指定为索引
    df1 = df1.set_index(index_list)
    # df1.loc["按列求和"] = df1.apply(lambda x: x.sum())
    df1['合计'] = df1.apply(lambda x: x.sum(), axis=1)
    # 求和,需将文本的列指定为索引
    df2 = df2.set_index(index_list)
    # df1.loc["按列求和"] = df1.apply(lambda x: x.sum())
    df2['合计'] = df2.apply(lambda x: x.sum(), axis=1)

    # 重置索引,防止导出excel列索引时单元格合并
    df1 = df1.reset_index()
    df2 = df2.reset_index()
    # 将生成的工作表导入到程序中
    result_sheet = pd.ExcelWriter(file_path3, engine='openpyxl')  # 先定义要存入的文件名xxx,然后分别存入xxx下不同的sheet
    # df1将0转变为空
    df1 = df1.replace(0, '')
    df1.to_excel(result_sheet, "销售明细", index=False, na_rep=0, inf_rep=0)
    # 这步不能省,否则不生成文件
    result_sheet.save()

    # 将生成的工作表导入到程序中
    result_sheet = pd.ExcelWriter(file_path4, engine='openpyxl')  # 先定义要存入的文件名xxx,然后分别存入xxx下不同的sheet
    # df1将0转变为空
    df2.to_excel(result_sheet, "销售明细", index=False, na_rep=0, inf_rep=0)
    # 这步不能省,否则不生成文件
    result_sheet.save()


if __name__ == '__main__':
    pretreatment()

    file_path3 = './src/本周销售明细精修.xlsx'
    file_path4 = './src/上周销售明细精修.xlsx'
    # 销售明细
    df3 = pd.read_excel(file_path3, sheet_name='销售明细')
    df4 = pd.read_excel(file_path4, sheet_name='销售明细')
    # 部门周销
    df01 = df3.pivot_table(index="部门名称", values="合计", aggfunc='sum').copy()
    df01 = df01.reset_index()
    df01.sort_values(by="合计", axis=0, ascending=False, inplace=True)
    # 客户周销环比
    index_list = ['部门名称', '商店名称']
    # 本周客户周销
    df021 = df3.pivot_table(index=index_list, values="合计", aggfunc='sum').copy()
    # 上周客户周销
    df022 = df4.pivot_table(index=index_list, values="合计", aggfunc='sum').copy()
    # 全连接
    # 重命名列
    df021["本周销量"] = df021.pop('合计')
    df022['上周销量'] = df022.pop('合计')
    df023 = pd.merge(df021, df022, how='outer', left_index=True, right_index=True)
    df023['销比'] = (df023['本周销量']-df023['上周销量'])/df023['上周销量']
    df023 = df023.reset_index()
    df023.sort_values(by="销比", axis=0, ascending=False, inplace=True)

    #品类周销环比
    #本周销量
    df031 = df3.pivot_table(index="品类名称", values="合计", aggfunc='sum').copy()
    #上周销量
    df032 = df4.pivot_table(index="品类名称", values="合计", aggfunc='sum').copy()
    # 全连接
    # 重命名列
    df031["本周销量"] = df031.pop('合计')
    df032['上周销量'] = df032.pop('合计')
    df033 = pd.merge(df031, df032, how='outer', left_index=True, right_index=True)
    df033['销比'] = (df033['本周销量'] - df033['上周销量']) / df033['上周销量']
    df033 = df033.reset_index()
    df033.sort_values(by="销比", axis=0, ascending=False, inplace=True)

    #季节周销
    df04 = df3.pivot_table(index="季节名称", values="合计", aggfunc='sum').copy()
    df04 = df04.reset_index()
    df04.sort_values(by="合计", axis=0, ascending=False, inplace=True)
    #品类周销
    df05 = df3.pivot_table(index="品类名称", values="合计", aggfunc='sum').copy()
    df05 = df05.reset_index()
    df05.sort_values(by="合计", axis=0, ascending=False, inplace=True)

    # 各部门品类销量前五
    index_list = ['部门名称', '品类名称']
    df060 = df3.pivot_table(index=index_list, values="合计", aggfunc='sum').copy()

    df060 = df060.reset_index()

    df061 = df060[df060['部门名称'] == '商品1部'].nlargest(5, '合计')
    df062 = df060[df060['部门名称'] == '商品3部'].nlargest(5, '合计')
    df063 = df060[df060['部门名称'] == '商品6部'].nlargest(5, '合计')
    df064 = df060[df060['部门名称'] == '直营4部'].nlargest(5, '合计')
    df065 = pd.concat([df061, df062, df063, df064])
    #删除第一列数字索引
    #df065 = df065.drop(df065.columns[0], axis=1)

    #df065 = df065.pivot_table(index=index_list, values="合计", aggfunc='sum').copy()
    df065.reset_index()
    print(df065)

    # 将生成的工作表导入到程序中
    file_path5 = './src/双周数据图表.xlsx'
    creat_excel(file_path5)
    result_sheet = pd.ExcelWriter(file_path5, engine='openpyxl')  # 先定义要存入的文件名xxx,然后分别存入xxx下不同的sheet
    # df1将0转变为空
    #部门周销
    df01 = df01.replace(0, '')
    df01.to_excel(result_sheet, "部门周销", index=False, na_rep=0, inf_rep=0)
    # 客户周销环比
    #将NaN替换为空白
    df023 = df023.fillna('')
    df023.to_excel(result_sheet, "客户周销环比", index=False, na_rep=0, inf_rep=0)
    #品类周销环比
    # 将NaN替换为空白
    df033 = df033.fillna('')
    df033.to_excel(result_sheet, "品类周销环比", index=False, na_rep=0, inf_rep=0)

    # 季节周销
    df04 = df04.replace(0, '')
    df04.to_excel(result_sheet, "季节周销", index=False, na_rep=0, inf_rep=0)

    # 品类周销
    df05 = df05.replace(0, '')
    df05.to_excel(result_sheet, "品类周销", index=False, na_rep=0, inf_rep=0)
    # 品类部门周销排名
    df065 = df065.replace(0, '')
    df065.to_excel(result_sheet, "品类部门周销排名", index=False, na_rep=0, inf_rep=0)
    # 这步不能省,否则不生成文件
    result_sheet.save()
	# See PyCharm help at https://www.jetbrains.com/help/pycharm/

到了这里,关于pandas处理双周数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pandas入门实践2 -数据处理

    为了准备数据进行分析,我们需要执行数据处理。在本节中,我们将学习如何清理和重新格式化数据(例如,重命名列和修复数据类型不匹配)、对其进行重构/整形,以及对其进行丰富(例如,离散化列、计算聚合和组合数据源)。 数据清洗 在本节中,我们将介绍如何创建

    2023年04月22日
    浏览(54)
  • 【Python数据处理】-Pandas笔记

    Pandas是一个强大的Python数据处理库,它提供了高效的数据结构和数据分析工具,使数据处理变得简单而快速。本篇笔记将介绍Pandas中最常用的数据结构——Series和DataFrame,以及数据处理的各种操作和技巧。 (一)创建Series Series是Pandas中的一维数组,类似于带有标签的NumPy数组

    2024年02月12日
    浏览(37)
  • Python Pandas 处理Excel数据 制图

    目录 1、饼状图  2、条形统计图

    2024年02月11日
    浏览(29)
  • 头歌Python实训——pandas数据处理

    任务描述 本关任务: 超市销售数据如图所示 建立excel文件“类别销售”,根据不同类别建立多个工作表,将相同类别的销售信息存放在相应的工作表中。 相关知识 为了完成本关任务,你需要掌握:1.读取excel文件,2.筛选dataframe数据,3.将数据写入工作簿和工作表 从excel文件读

    2024年02月04日
    浏览(30)
  • pandas由入门到精通-数据处理

    文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、异常值处理,数据类型统计,分箱,随机采样,向量化编码等方法。每种方法都给出了代码和实例,并用表格进行总结。 判断D

    2024年02月11日
    浏览(36)
  • 数据分析-Pandas如何轻松处理时间序列数据

    时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。此处选择巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 N O 2 ​ 数据作为样例。 python数据分析-数据表读写到pandas 经典算法-遗传算法的python实现 经典算法-遗传算法的一个简单例子 大

    2024年01月25日
    浏览(36)
  • 第五章Pandas数据载入与预处理

    1:利用下面哪个可视化绘图可以发现数据的异常点 A.密度图 B.直方图 C.盒图 D.概率图 知识点解析: 密度图:表现与数据值对应的边界或域对象的一种理论图形表示方法 直方图:直方图是数值数据分布的精确图形表示 盒图:是结构化编程中的一种可视化建模 概率图:用图来

    2024年02月05日
    浏览(40)
  • 【011】pandas处理数据的作用_#py

    上面导入数组的结果如下: df1 df2 df3 df4 columns的内容,修改前后的 如下: drop=True drop=False 先确定列,再确定行号。用 iloc 确定行号 将 df 插入 df3 的首列中 其各个含义如下: loc column value allow_duplicates 表示插入第几列 对插入的列名重命名 插入的列内容 允许出现重复的行名

    2023年04月27日
    浏览(31)
  • 数据分析基础之《pandas(7)—高级处理2》

    四、合并 如果数据由多张表组成,那么有时候需要将不同的内容合并在一起分析 1、先回忆下numpy中如何合并 水平拼接     np.hstack() 竖直拼接     np.vstack() 两个都能实现     np.concatenate((a, b), axis=) 2、pd.concat([data1, data2], axis=1) 按照行或者列进行合并,axis=0为列索引,axis=1为

    2024年02月19日
    浏览(35)
  • Python 数据处理与分析之 Pandas 库

    Pandas(Python Data Analysis Library)是一个流行的 Python 第三方库,是数据处理和数据分析中不可或缺的工具之一,用于数据处理和数据分析。 它提供了高效的数据分析方法和灵活且高效的数据结构。相比于其他的数据处理库,pandas更适用于处理具有关系型数据或者带标签数据的情

    2024年02月05日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包