Part14:Pandas批量拆分与合并Excel文件

Pandas批量拆分Excel与合并Excel

实例演示:

1.将一个大Excel等份拆成多个Excel

2.将多个小Excel合并成一个大Excel并标记来源

#本节课的数据目录work_dir
work_dir='./course_datas/c15_excel_split_merge'
#work_dir下面的splits目录,来放置拆分后的小文件
splits_dir=f'{work_dir}/splits'
import os 
#如果splits_dir目录不存在就创建一个小目录
if not os.path.exists(splits_dir):
    os.mkdir(splits_dir)

1、读取源Excel到Pandas

import pandas as pd
df_source=pd.read_excel(f'{work_dir}/crazyant_blog_articles_source.xlsx')
df_source.head()

df_source.index
df_source.shape
total_row_count=df_source.shape[0]
total_row_count

 

一、将一个大Excel等份拆成多个Excel

1.使用df.iloc方法,将一个人的dataframe,拆分成多个小dataframe

2.将使用dataframe.to_excel保存每个小Excel

1、计算拆分后的每个excel的行数

#将一个大的EXCEL文件拆分给这几个人
user_name=['xiaohu','xiaoshuai','xiaolan','xiaofan','xiaok','xiaom']
#每个人的任务数目
splits_size=total_row_count//len(user_name)
#判断每个人分配的任务数是否为整数,若不为整数则+1
if total_row_count % len(user_name) !=0:
    splits_size+=1
splits_size

2、拆分成多个dataframe

#将拆出来的小的dataframe存在df_sub[]当中
df_subs=[]
for index,user_name in enumerate(user_name):
    #iloc的开始索引,从0开始进行索引
    begin=index*splits_size
    #iloc的结束索引
    end=begin+splits_size
    #实现df按照iloc拆分
    df_sub=df_source.iloc[begin:end]
    #将每个子df存入列表
    df_subs.append((index,user_name,df_sub))

3、将每个datafame存入excel

for index,user_name,df_sub in df_subs:
    file_name=f'{splits_dir}/crazyant_blog_articles_{index}_{user_name}.xlsx'
    df_sub.to_excel(file_name,index=False)

二、合并多个小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
#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。

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)

3、使用pd.concat进行合并 

df_merged=pd.concat(df_list)
df_merged.shape
df_merged.head()

df_merged['username'].value_counts()

 

4、将合并后的dataframe输出到excel中 

df_merged.to_excel(f'{work_dir}/crazyant_blog_articles_merged.xlsx',index=False)

你可能感兴趣的:(Pandas,pandas,数据分析,数据挖掘)