利用python Pandas实现批量拆分Excel与合并Excel

 更新时间:2021年05月23日 17:04:53   作者:蔡大远  
今天带大家学习利用python Pandas实现批量拆分Excel与合并Excel,文中有非常详细的的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下

一、实例演示

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获取淘宝服务器时间的代码示例

    这篇文章主要介绍了python获取淘宝服务器时间的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 使用apidoc管理RESTful风格Flask项目接口文档方法

    使用apidoc管理RESTful风格Flask项目接口文档方法

    下面小编就为大家分享一篇使用apidoc管理RESTful风格Flask项目接口文档方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Python机器学习pytorch模型选择及欠拟合和过拟合详解

    Python机器学习pytorch模型选择及欠拟合和过拟合详解

    如何发现可以泛化的模式是机器学习的根本问题,将模型在训练数据上过拟合得比潜在分布中更接近的现象称为过拟合,用于对抗过拟合的技术称为正则化
    2021-10-10
  • 带你一文搞懂Python文件的读写操作

    带你一文搞懂Python文件的读写操作

    读写文件是最常见的IO操作,Python内置了读写文件的函数,下面这篇文章主要给大家介绍了关于Python文件读写操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Python实战基础之Pandas统计某个数据列的空值个数

    Python实战基础之Pandas统计某个数据列的空值个数

    我们在处理数据的时候,经常需要检查数据的质量,也需要知道出问题的数据在哪个位置,下面这篇文章主要给大家介绍了关于Python实战基础之利用Pandas统计某个数据列空值个数的相关资料,需要的朋友可以参考下
    2022-08-08
  • python3排序的实例方法

    python3排序的实例方法

    在本篇文章里小编给大家整理的是一篇关于python3排序的实例方法,有兴趣的朋友们可以学习参考下。
    2020-10-10
  • python通过http下载文件的方法详解

    python通过http下载文件的方法详解

    这篇文章主要介绍了python通过http下载文件的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 使用OpenCV circle函数图像上画圆的示例代码

    使用OpenCV circle函数图像上画圆的示例代码

    这篇文章主要介绍了使用OpenCV circle函数图像上画圆的示例代码,本文内容简短,给大家突出重点内容,需要的朋友可以参考下
    2019-12-12
  • Python程序员鲜为人知但你应该知道的17个问题

    Python程序员鲜为人知但你应该知道的17个问题

    这篇文章主要介绍了Python程序员代码编写时应该避免的17个“坑”,也可以说成Python程序员代码编写时应该避免的17个问题,需要的朋友可以参考下
    2014-06-06
  • python实现飞机大战小游戏

    python实现飞机大战小游戏

    这篇文章主要为大家详细介绍了python实现飞机大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论