利用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抓取某汽车网数据解析html存入excel示例
Dec 04 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
Python中isnumeric()方法的使用简介
May 19 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
python实现操作文件(文件夹)
Oct 31 Python
Django 自定义分页器的实现代码
Nov 24 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
Python基础之元编程知识总结
May 23 #Python
Python利用folium实现地图可视化
python爬虫之selenium库的安装及使用教程
教你利用python实现企业微信发送消息
python基础之文件处理知识总结
May 23 #Python
Python绘制地图神器folium的新人入门指南
Python关于OS文件目录处理的实例分享
May 23 #Python
You might like
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
vue2里面ref的具体使用方法
2017/10/27 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
Python 读取位于包中的数据文件
2020/08/07 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
介绍一下Python下range()函数的用法
2013/11/07 面试题
建筑专业自我鉴定
2013/10/22 职场文书
力学专业毕业生自荐信
2013/11/17 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
企业介绍信范文
2015/01/30 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript