利用python Pandas实现批量拆分Excel与合并Excel


Posted in Python onMay 23, 2021

一、实例演示

1.将一个大Excel等份拆成多个Excel
2.将多个小Excel合并成一个大Excel并标记来源

work_dir="./course_datas/c15_excel_split_merge"
splits_dir=f"{work_dir}/splits"

import os
if not os.path.exists(splits_dir):
    os.mkdir(splits_dir)

二、读取源Excel到Pandas

import pandas as pd
No output
df_source = pd.read_excel(f"{work_dir}/crazyant_blog_articles_source.xlsx")
No output
df_source.head()
id	title	tags
0	2585	Tensorflow怎样接收变长列表特征	python,tensorflow,特征工程
1	2583	Pandas实现数据的合并concat	pandas,python,数据分析
2	2574	Pandas的Index索引有什么用途?	pandas,python,数据分析
3	2564	机器学习常用数据集大全	python,机器学习
4	2561	一个数据科学家的修炼路径	数据分析
df_source.index
RangeIndex(start=0, stop=258, step=1)
df_source.shape

(258, 3)

total_row_count = df_source.shape[0]
total_row_count

258

三、将一个大Excel等份拆成多个Excel

1.使用df.iloc方法,将一个大的dataframe,拆分成多个小dataframe
2.将使用dataframe.to_excel保存每个小Excel

1、计算拆分后的每个excel的行数

# 这个大excel,会拆分给这几个人
user_names = ["xiao_shuai", "xiao_wang", "xiao_ming", "xiao_lei", "xiao_bo", "xiao_hong"]
No output
# 每个人的任务数目
split_size = total_row_count // len(user_names)
if total_row_count % len(user_names) != 0:
    split_size += 1

split_size

43

2、拆分成多个dataframe

df_subs = []
for idx, user_name in enumerate(user_names):
    # iloc的开始索引
    begin = idx*split_size
    # iloc的结束索引
    end = begin+split_size
    # 实现df按照iloc拆分
    df_sub = df_source.iloc[begin:end]
    # 将每个子df存入列表
    df_subs.append((idx, user_name, df_sub))
No output

3、将每个datafame存入excel

for idx, user_name, df_sub in df_subs:
    file_name = f"{splits_dir}/crazyant_blog_articles_{idx}_{user_name}.xlsx"
    df_sub.to_excel(file_name, index=False)
No output

四、合并多个小Excel到一个大Excel

1.遍历文件夹,得到要合并的Excel文件列表
2.分别读取到dataframe,给每个df添加一列用于标记来源
3.使用pd.concat进行df批量合并
4.将合并后的dataframe输出到excel

1. 遍历文件夹,得到要合并的Excel名称列表

import os
excel_names = []
for excel_name in os.listdir(splits_dir):
    excel_names.append(excel_name)
excel_names

['crazyant_blog_articles_0_xiao_shuai.xlsx',
 'crazyant_blog_articles_1_xiao_wang.xlsx',
 'crazyant_blog_articles_2_xiao_ming.xlsx',
 'crazyant_blog_articles_3_xiao_lei.xlsx',
 'crazyant_blog_articles_4_xiao_bo.xlsx',
 'crazyant_blog_articles_5_xiao_hong.xlsx']

2. 分别读取到dataframe

df_list = []

for excel_name in excel_names:
    # 读取每个excel到df
    excel_path = f"{splits_dir}/{excel_name}"
    df_split = pd.read_excel(excel_path)
    # 得到username
    username = excel_name.replace("crazyant_blog_articles_", "").replace(".xlsx", "")[2:]
    print(excel_name, username)
    # 给每个df添加1列,即用户名字
    df_split["username"] = username
    
    df_list.append(df_split)

crazyant_blog_articles_0_xiao_shuai.xlsx xiao_shuai
crazyant_blog_articles_1_xiao_wang.xlsx xiao_wang
crazyant_blog_articles_2_xiao_ming.xlsx xiao_ming
crazyant_blog_articles_3_xiao_lei.xlsx xiao_lei
crazyant_blog_articles_4_xiao_bo.xlsx xiao_bo
crazyant_blog_articles_5_xiao_hong.xlsx xiao_hong

3. 使用pd.concat进行合并

df_merged = pd.concat(df_list)
No output
df_merged.shape

(258, 4)

df_merged.head()

id title tags username
0 2585 Tensorflow怎样接收变长列表特征 python,tensorflow,特征工程 xiao_shuai
1 2583 Pandas实现数据的合并concat pandas,python,数据分析 xiao_shuai
2 2574 Pandas的Index索引有什么用途? pandas,python,数据分析 xiao_shuai
3 2564 机器学习常用数据集大全 python,机器学习 xiao_shuai
4 2561 一个数据科学家的修炼路径 数据分析 xiao_shuai

df_merged["username"].value_counts()

xiao_hong     43
xiao_bo       43
xiao_shuai    43
xiao_lei      43
xiao_wang     43
xiao_ming     43
Name: username, dtype: int64

xiao_hong     43xiao_bo       43xiao_shuai    43xiao_lei      43xiao_wang     43xiao_ming     43Name: username, dtype: int64

4. 将合并后的dataframe输出到excel

df_merged.to_excel(f"{work_dir}/crazyant_blog_articles_merged.xlsx", index=False)

到此这篇关于利用python Pandas实现批量拆分Excel与合并Excel的文章就介绍到这了,更多相关Pandas批量拆分Excel与合并Excel内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
python实现的系统实用log类实例
Jun 30 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
Python温度转换实例分析
Jan 17 Python
Python numpy 点数组去重的实例
Apr 18 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
详解Python中import机制
Sep 11 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
Python基础之元编程知识总结
May 23 #Python
Python利用folium实现地图可视化
python爬虫之selenium库的安装及使用教程
教你利用python实现企业微信发送消息
python基础之文件处理知识总结
May 23 #Python
Python绘制地图神器folium的新人入门指南
Python关于OS文件目录处理的实例分享
May 23 #Python
You might like
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
jQuery 技巧小结
2010/04/02 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
JavaScript中的闭包
2016/02/24 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python的time模块中的常用方法整理
2015/06/18 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
python语音识别实践之百度语音API
2018/08/30 Python
Django框架模板介绍
2019/01/15 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
python编写简单端口扫描器
2019/09/04 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
学生就业推荐信
2013/11/13 职场文书
上班迟到检讨书
2014/01/10 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
大班亲子运动会方案
2014/06/10 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers