利用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 相关文章推荐
python获得两个数组交集、并集、差集的方法
Mar 27 Python
Python中tell()方法的使用详解
May 24 Python
Python自动扫雷实现方法
Jul 25 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
python如何去除字符串中不想要的字符
Jul 05 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
Django后台管理系统的图文使用教学
Jan 20 Python
python实现文字版扫雷
Apr 24 Python
python中 .npy文件的读写操作实例
Apr 14 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 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学习之变量的使用
2011/05/29 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
Jquery Ajax请求代码(2)
2011/01/07 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
js实现缓动动画
2020/11/25 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
python实现汉诺塔递归算法经典案例
2021/03/01 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python和php学习哪个更有发展
2020/06/17 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
工程师岗位职责
2013/11/08 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
求职意向书
2014/04/01 职场文书
自我推荐信范文
2014/05/09 职场文书
Oracle笔记
2021/04/05 Oracle
MySQL创建管理LIST分区
2022/04/13 MySQL