利用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通过floor函数舍弃小数位的方法
Mar 17 Python
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
python脚本内运行linux命令的方法
Jul 02 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
python wsgiref源码解析
Feb 06 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 文章采集正则代码
2009/12/28 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
实例分析nodejs模块xml2js解析xml过程中遇到的坑
2017/03/18 NodeJs
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Python文件夹与文件的操作实现代码
2014/07/13 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Python图片的横坐标汉字实例
2019/12/04 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
python如何从键盘获取输入实例
2020/06/18 Python
python如何对链表操作
2020/10/10 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
电视购物广告词
2014/03/19 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
Python中tqdm的使用和例子
2022/09/23 Python