利用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实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 Python
Python列表(list)常用操作方法小结
Feb 02 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
Python中extend和append的区别讲解
Jan 24 Python
Python元组常见操作示例
Feb 19 Python
Python帮你识破双11的套路
Nov 11 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
Python识别html主要文本框过程解析
Feb 18 Python
Python计算IV值的示例讲解
Feb 28 Python
Python制作春联的示例代码
Jan 22 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中exec与system用法区别分析
2014/09/22 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
python比较2个xml内容的方法
2015/05/11 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
Python 支付整合开发包的实现
2019/01/23 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
总结python中pass的作用
2019/02/27 Python
用python写测试数据文件过程解析
2019/09/25 Python
Python日志处理模块logging用法解析
2020/05/19 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
本科毕业生的求职信范文
2013/11/20 职场文书
财务主管自我鉴定
2014/01/17 职场文书
产品售后服务承诺书
2014/05/21 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python