因为工作的需要自行学习了Python的一些功能,将所学的经验在这里分享给大家
文章目录
- 目录
背景说明:系列文章目录文章目录前言一、环境准备二、使用步骤1.引入库2.读入数据3.去除重复值4.切分Excel到不同的公司代码,并且以公司代码重新命名总结
前言
工作中我们可能会需要处理 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)