第一部分:需求说明
-
快速拆分excel表格然后进行数据下放,是工作中非常常见的工作需求。如过用手动拆分,需要花费大量的时间,而且很容易出错,我相信很多小伙伴都遇到过这个问题,今天就结合作者在工作中的需求和大家分享用python一键拆分的方法。
-
本次案例为了推广让从来都没有用过python的小伙伴也能直接使用,所以部分个性化基础数据处理部分沿用excel直接处理,数据拆分部分才用python处理。本文主要讲解安装环境-复制代码直接运行,代码原理不再赘述,适合所有人使用,不需要你会python。如果你不是新手请跳过第二部份安装的介绍,直接到第三部分单字段拆分和第四部分多字段拆分的代码部分。
第二部分:anaconda3的安装
安装说明
-
为了方便大家anaconda3的安装包作者已经下载好,你可以直接获取按照下面的安装步骤安装即可(此安装过程适用于企业电脑有诸多限制的本地版本,如果你需要使用更多功能,建议你百度一下安装全部功能版本)
-
安装包作者上传百度云盘供大家下载,如果链接过期请联系作者或者自行下载:复制链接在浏览器中打开: https://pan.baidu.com/s/1x_IZJySpPEmk8sdvBQITDw 提取码:v5wp
安装步骤
-
下载安装包,点击anaconda3安装(其中pycharm是第三方编程工具可以不用)
-
修改自定安装路径,这里推荐使用:D:\anaconda3
-
-
等待安装完毕,需要花费一段时间
-
-
安装结束
-
-
新建存放代码和数据的文件夹
-
这里我们先新建一个存放代码的文件夹:D:\python代码\python拆分表格
-
-
再新建一个存放数据结果的文件夹:D:\python代码\python拆分表格\拆分结果
-
-
使用找到编辑代码的位置
-
-
-
输入打开代码的位置:jupyter notebook D:\python代码\python拆分表格
-
-
在弹出的网页中首次新建python3的代码编辑
-
-
重命名本次使用的代码名称
-
-
-
-
输入python需要用到的numpy、pandas模块是否自带的已有,一般都有,导入这两个模块运行不报错即可(如果没有需要pip install numpy 、pip install pandas,这里不再细讲)
-
ok,到此python的环境已经准备完成。
第三部分:python单条件拆分excel表格
3.1 数据预处理-数据分到个人
为了方便没有使用过python的同学也可以直接复制代码直接运行拆分表格,所以案例中数据处理部分我们使用多数人都会的excel处理。如果你的数据已经预先处理好了,请跳过此部分。直接浏览3.2 python条件拆分表格部分。
-
-
将数据源中的数据随机拆分为10等份(即给到10个人)
-
excel快速计算行数:=COUNTA(H:H)
-
-
生成随机数:=RANDBETWEEN(1,1720) ,复制粘贴为数值,并排序
-
新建序号列:1-1711
-
-
分组:vlookup函数
-
计算每份的行数 =ROUND(P2/10,0),即1712/10
-
生成分组数组
-
使用vlookup的模糊匹配分组
到此数据预处理已经完成,为了截图方便隐藏了部分列,取消隐藏,然后保存数据,关闭excel,数据路劲:D:\python代码\python拆分表格/text.xlsx。
3.2 python对excel进行单条件拆分
需要注意的是下面的代码中的几个点。
-
打开数据的路径:path_read = r"D:\python代码\python拆分表格/text.xlsx"
-
拆分的列名需要保持一致:Split_column_name="分组1"
-
拆分excel的工作簿名称:sheet_name='Sheet1'
-
数据存储路劲:path_to_excel = r"D:\python代码\python拆分表格\拆分结果/"
然后复制下面的代码块到jupyter notebook中运行即可
# -*- coding: utf-8 -*-
python条件拆分excel表格
2021/1/12
@author:jalen
import numpy as np
import pandas as pd
def plit_excel_table():
data = pd.read_excel(path_read,sheet_name=sheet_name,dtype = 'str') #读取excel表格,并指定数据类型
# data["基准id"]=data["基准id"].apply(str)
rows = data.shape[0] #获取行数 shape[1]获取列数
Split_column_name_list = [] #创建一个用于存放拆分列名的列表
for i in range(rows): #循环遍历所有行
temp = str(data[Split_column_name][i]) #需要用于做条件拆分的列
if temp not in Split_column_name_list:
Split_column_name_list.append(temp) #将用于拆分的列分类存在一个列表中
for Split_column in Split_column_name_list: #循环遍历存放好的条件拆分字段
new_df = pd.DataFrame() #新建二维表
#display(new_df) #查验表
for i in range (0, rows): #条件循环遍历原表,将相同条件的内容存在同一个DataFrame中
if str(data[Split_column_name][i]) == Split_column:
new_df = pd.concat([new_df, data.iloc[[i],:]], axis = 0, ignore_index = True)
#print(new_df) #输出查验结果
#将每个DataFrame写入一个新的excel中
new_df.to_excel(path_to_excel+str(Split_column)+".xlsx", sheet_name=str(Split_column), index = False)
if __name__ == "__main__":
path_read = r"D:\python代码\python拆分表格/text.xlsx" #读取的excel路径
sheet_name='Sheet1' #读取excel的sheet_name
Split_column_name="分组1" #条件拆分的列1-- 对应列名
path_to_excel = r"D:\python代码\python拆分表格\拆分结果/" #拆分后存入的路径
plit_excel_table() #执行plit_excel_table
点击运行
运行完毕,结果数据如下。
ok,结束了,然后后面经常要用到只需要替换数据源中的数据即可,后面拆分时先清空本次拆分的结果表,同时不是每次拆分的条件字段名都是"分组1"的,只需要修改表格中用于拆分的字段名等于代码中的Split_column_name的名称即可,你可以任意修改代码或者表字段名。
3.3 数据预处理后按照部门人数拆分案例
-
-
按照部门人数分组
-
假设6个部门每个部门人数不同分组匹配vlookup模糊匹配=VLOOKUP(N2,Q:R,2,1)
-
ok,数据处理完成点击保存(或者把公式部分复制粘贴保存为数值,然后清除多余部分)。
-
-
拆分代码和上面3.2一致,再次使用代码时需要找到代码位置进入
回车
运行代码
输出结果
3.4 python多条件拆分表格
-
需求:按照部门、销售姓名组合字段拆分表格
-
数据预处理不再概述
-
-
-
新建代码
-
-
代码块
-
-
需要注意拆分字段的名称于代码中的保持一直
# -*- coding: utf-8 -*-
python条件拆分excel表格
2021/1/12
@author:jalen
import numpy as np
import pandas as pd
def plit_excel_table():
data = pd.read_excel(path_read,sheet_name=sheet_name,dtype = 'str') #读取excel表格,并指定数据类型
# data["基准id"]=data["基准id"].apply(str)
rows = data.shape[0] #获取行数 shape[1]获取列数
Split_column_name_list = [] #创建一个用于存放拆分列名的列表
for i in range(rows): #循环遍历所有行
temp = str(data[Split_column_name2][i])+"-"+str(data[Split_column_name][i]) #将需要用于做条件拆分的列连接起来
if temp not in Split_column_name_list:
Split_column_name_list.append(temp) #将用于拆分的列分类存在一个列表中
for Split_column in Split_column_name_list: #循环遍历存放好的条件拆分字段
new_df = pd.DataFrame() #新建二维表
#display(new_df) #查验表
for i in range (0, rows): #条件循环遍历原表,将相同条件的内容存在同一个DataFrame中
if str(data[Split_column_name2][i])+"-"+str(data[Split_column_name][i]) == Split_column:
new_df = pd.concat([new_df, data.iloc[[i],:]], axis = 0, ignore_index = True)
#print(new_df) #输出查验结果
#将每个DataFrame写入一个新的excel中
new_df.to_excel(path_to_excel+str(Split_column)+".xlsx", sheet_name=str(Split_column), index = False)
if __name__ == "__main__":
path_read = r"D:\python代码\python拆分表格/text.xlsx" #读取的excel路径
sheet_name='Sheet1' #读取excel的sheet_name
Split_column_name="销售" #条件拆分的列1-- 对应列名
Split_column_name2="部门" # 条件拆分的列2 -- 对应列名
path_to_excel = r"D:\python代码\python拆分表格\拆分结果/" #拆分后存入的路径
plit_excel_table() #执行plit_excel_table
ok,结束。只需要安装anaconda运行环境,复制运行文章中代码即可使用python按照条件拆分excel表格。本文主要讲解安装环境-复制代码直接运行,代码原理不再赘述,适合所有人使用,不需要你会python。
。