利用Python将Excel按照公司代码表进行切割并存档

 

因为工作的需要自行学习了Python的一些功能,将所学的经验在这里分享给大家

 

 


前言

工作中我们可能会需要处理 Excel的内容, 其中某一个字段里面可能有不同的值,我们需要将这些不同的值进行切割储存成另外的excel
例如:我从数据库下载的数据是包含各个公司的资料,我如何将这些资料按照公司别切分出来,并且分别寄送给各个公司所需要的收件人, 因为每一个公司看到的信息,Excel内容是不一样的,如果公司很多有一两百家的时候,人工切割就很费劲了,本文就介绍了如何透过Python自动的切割Excel。


 

一、环境准备

示例:我将从数据库下载的Excel, 放在一个工作区域中; 不过Python切割好的一次,我想放在另外一个工作区域内

我们来看一下这个Excel的样式

 

二、使用步骤

1.引入库

代码如下(示例):

# 根据公司代码   拆分excel
#
import os
import pandas as pd

2.读入数据

代码如下(示例):

#  此处为文件路径
path_op = r"D:\Doc\Python\homework\\"  #记录 operate path
path_to = r"D:\Doc\Python\homework\to\\"  #记录拆解的Excel档案 operate path
op_fn = 'mis_delta_list.xlsx'  #需要被拆解的Excel档案名称


fn = os.listdir(path_op)
file_name = os.path.join(path_op, op_fn)  # 要打开的Excel的完整路径
df = pd.read_excel(file_name)        #开启Excel

3.去除重复值

以这个案例, 公司代码大约有100多家,但是我如何能够知道这100多家是哪几家,我怎么分别把它切开来呢,首先我们就要进行去重的处理

代码如下(示例):

# 因为要发送的公司代码很多,最后要按照公式代码切割excel先取得公司代码的家数量
df_comp = df.loc[:,['公司代码']]
print(df_comp.shape)#打印行数
df_comp=df_comp.drop_duplicates(keep='first')#去重 {‘first’, ‘last’, False}, default ‘first’ 删除重复项并保留第一次出现的项
print(df_comp.shape)#打印去重后的行数

4.切分Excel到不同的公司代码,并且以公司代码重新命名

以这个案例, 上三种切分的方式

我最喜欢的是用query的方式进行切分,实在是好用好懂


for row in range(len(df_comp)):
    company_list = df_comp.iloc[row,[0]].values
    company = company_list[0]
    print(company)


    df1 = df.iloc[:,:][df.公司代码 == company]  #用条件的方式
    df2 = df.query('公司代码 in @company_list') #用query的方式是最好懂的方式
    df3 = df.loc[df.公司代码 == company,]  #逗号前是行,逗号后是列的范围
 ##  看三种格式跑出来的结果
    print('df1:',df1.shape)
    print('df2:',df2.shape)
    print('df3:',df3.shape)

 ## 把档案存在指定的路径
    to_fn = str(company) + op_fn
    file_excel_name = os.path.join(path_to, to_fn)
    df2.to_excel(file_excel_name,na_rep=11,index=False)

 

来看一下跑出来的结果


总结

这种工作如果按人工去做的话,工作量很大,用pandas提供快捷的处理方式提示, 全部的代码长度不到100行

以下是完整的代码, 有需要的朋友可以将代码复制出去,重新设置路径即可使用

下一篇文章将介绍,怎么透过邮件将这些Excel分别发送给所需要的公司。

# 根据公司代码   拆分excel
#
import os
import pandas as pd


#  此处为文件路径
path_op = r"D:\Doc\Python\homework\\"  #记录 operate path
path_to = r"D:\Doc\Python\homework\to\\"  #记录拆解的Excel档案 operate path
op_fn = 'mis_delta_list.xlsx'  #需要被拆解的Excel档案名称


fn = os.listdir(path_op)
file_name = os.path.join(path_op, op_fn)  # 要打开的Excel的完整路径
df = pd.read_excel(file_name)        #开启Excel
# 因为要发送的公司代码很多,最后要按照公式代码切割excel先取得公司代码的家数量
df_comp = df.loc[:,['公司代码']]
print(df_comp.shape)#打印行数
df_comp=df_comp.drop_duplicates(keep='first')#去重 {‘first’, ‘last’, False}, default ‘first’ 删除重复项并保留第一次出现的项
print(df_comp.shape)#打印去重后的行数


for row in range(len(df_comp)):
    company_list = df_comp.iloc[row,[0]].values
    company = company_list[0]
    print(company)


    df1 = df.iloc[:,:][df.公司代码 == company]  #用条件的方式
    df2 = df.query('公司代码 in @company_list') #用query的方式是最好懂的方式
    df3 = df.loc[df.公司代码 == company,]  #逗号前是行,逗号后是列的范围
 ##  看三种格式跑出来的结果
    print('df1:',df1.shape)
    print('df2:',df2.shape)
    print('df3:',df3.shape)

 ## 把档案存在指定的路径
    to_fn = str(company) + op_fn
    file_excel_name = os.path.join(path_to, to_fn)
    df2.to_excel(file_excel_name,na_rep=11,index=False)



 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值