利用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 相关文章推荐
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
python判断windows系统是32位还是64位的方法
May 11 Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 Python
python daemon守护进程实现
Aug 27 Python
Python正则表达式指南 推荐
Oct 09 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
使用Python防止SQL注入攻击的实现示例
May 21 Python
python小白学习包管理器pip安装
Jun 09 Python
运行Python编写的程序方法实例
Oct 21 Python
python字符串拼接.join()和拆分.split()详解
Nov 23 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_SELF的安全问题
2009/09/05 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
js实现随机圆与矩形功能
2020/10/29 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
《第一次抱母亲》教学反思
2014/04/16 职场文书
四年级评语大全
2014/04/21 职场文书
新文化运动的口号
2014/06/21 职场文书
老乡聚会通知
2015/04/23 职场文书
裁员通知
2015/04/25 职场文书
工商行政处罚决定书
2015/06/24 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS