利用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 相关文章推荐
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
解决Python使用列表副本的问题
Dec 19 Python
Python求凸包及多边形面积教程
Apr 12 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
基于Python采集爬取微信公众号历史数据
Nov 27 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/03/25 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
使用PHP开发留言板功能
2019/11/19 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
vue-cli webpack配置文件分析
2019/05/20 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
python 实现堆排序算法代码
2012/06/05 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
python实现复制文件到指定目录
2019/10/16 Python
通过实例了解python property属性
2019/11/01 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
yy婚礼主持词
2014/03/14 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android