利用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动态加载变量示例分享
Feb 17 Python
对于Python中线程问题的简单讲解
Apr 03 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
Python3内置模块random随机方法小结
Jul 13 Python
pandas 空数据处理方法详解
Nov 02 Python
python生成特定分布数的实例
Dec 05 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
pytorch中的weight-initilzation用法
Jun 24 Python
python 经纬度求两点距离、三点面积操作
Jun 03 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 4.2书写安全的脚本
2006/10/09 PHP
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
PHP动态变静态原理
2006/11/25 PHP
PHP 缓存实现代码及详细注释
2010/05/16 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
javascript写的一个链表实现代码
2009/10/25 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
搭建vue开发环境
2018/07/19 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
python实现的一个火车票转让信息采集器
2014/07/09 Python
简单谈谈python中的语句和语法
2017/08/10 Python
import的本质解析
2017/10/30 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python实现文本界面网络聊天室
2018/12/12 Python
python如何保证输入键入数字的方法
2019/08/23 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
依法行政工作汇报
2014/10/28 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书