利用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 相关文章推荐
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
python 梯度法求解函数极值的实例
Jul 10 Python
利用python计算时间差(返回天数)
Sep 07 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 Python
基于python 凸包问题的解决
Apr 16 Python
Python中有几个关键字
Jun 04 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
php中动态修改ini配置
2014/10/14 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
jquery插件validate验证的小例子
2013/05/08 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
构建Python包的五个简单准则简介
2015/06/15 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Python单链表原理与实现方法详解
2020/02/22 Python
python程序输出无内容的解决方式
2020/04/09 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
家长给小学生的评语
2014/01/30 职场文书
元旦获奖感言
2014/03/08 职场文书
爱情保证书
2015/01/17 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL