实例演示:
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)
- 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
1.使用df.iloc方法,将一个人的dataframe,拆分成多个小dataframe
2.将使用dataframe.to_excel保存每个小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
- #将拆出来的小的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))
- 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)
1.遍历文件夹,得到要合并的Excel文件列表
2.分别读取到dataframe,给每个df添加—列用于标记来源
3.使用pd.concat进行df批量合并
4.将合并后的dataframe输出到excel
- import os
- excel_names=[]
- for excel_name in os.listdir(splits_dir):
- excel_names.append(excel_name)
- excel_names
- #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
- 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)
- df_merged=pd.concat(df_list)
- df_merged.shape
- df_merged.head()
df_merged['username'].value_counts()
df_merged.to_excel(f'{work_dir}/crazyant_blog_articles_merged.xlsx',index=False)