Python(pandas)文件拆分与合并

您所在的位置:网站首页 茶文化卡片学生制作 Python(pandas)文件拆分与合并

Python(pandas)文件拆分与合并

2023-03-30 12:11| 来源: 网络整理| 查看: 265

"""Pandas批量拆分Excel与合并Excel实例演示:1.将—个大Excel等份拆成多个Excel2.将多个小Excel合并成一个大Excel并标记来源"""import osimport pandas as pd

# 打开一个目录,目录内存放文件:work_dirwork_dir = "E:/Python-file/进阶/pandas/资料"split_dir = f"{work_dir}/拆分文件"

# 若split_dir不存在,创建这个目录:创建了一个目录:拆分文件# os.path.exists:判断目录是否存在,使用os.mkdir()函数创建目录if not os.path.exists(split_dir): os.mkdir(split_dir)

df_source = pd.read_excel("E:/Python-file/进阶/pandas/资料/数据拆分.xlsx")print(df_source.head())# 拆分时候要知道有多少行print(df_source.index)print(df_source.shape) # 返回行列元组# 把数据行数赋值给变量total_row_count = df_source.shape[0]print(total_row_count)

"""一、将一个大Excel等份拆成多个Excel1T1.使用df.iloc方法,将一个大的dataframe,拆分成多个小dataframe2.将使用dataframe.to_excel保存每个小Excel"""# 1、计算拆分后的每个excel的行数# 这个大excel,会拆分给这几个人user_name = ["xiao_shuai", "xiao_wang", "xiao_ming", "xiao_lei", "xiao_bo", "xiao_hong"]# 每个人的任务数目(平均分配)split_size = total_row_count // len(user_name)# 可能行数除以分配的人数除不尽,进行判断,如果不为0,则每个人多处理一行if total_row_count % len(user_name) != 0: split_size += 1# 返回每个人需要处理的行数print(split_size)

# 2、拆分成多个dataframe# 创建一个空列表single = 0df_subs = []# 遍历用户名列表:得到索引以及对应名称for idx, user_name in enumerate(user_name): # iloc的开始索引 begin = single * split_size # iloc结束索引 end = (single+1) * split_size single += 1 # print(idx, user_name) # 查看索引与姓名 print(begin, end)

# 实现df按iloc拆分:得到按行的切片,传入df_slice,每次切6个行 df_slice = df_source.iloc[begin:end] # 将每个子df存入列表:存入数据(每个人的下标,用户名,需要处理的df) df_subs.append((idx, user_name, df_slice))

# 3、将每个dataframe存入excel# 遍历传入的列表结果for idx, user_name, df_slice in df_subs: # 构建一个需要保存的文件名 file_name = f"{split_dir}/file_{idx}_{user_name}.xlsx" # 调用dataframe.to_excel保存每个小Excel,传入文件名,取消数字索引 df_slice.to_excel(file_name, index=False)

"""二、合并多个小Excel到一个大Excel1.遍历文件夹,得到要合并的Excel文件列表2.分别读取到dataframe,给每个df添加—列用于标记来源3.使用pd.concat进行df批量合并4.将合并后的dataframe输出到excel"""# 1.遍历文件夹,得到要合并的Excel名称列表# 创建一个空列表,用来存储小excel名字excel_names = []# 遍历每个小excel文件,os.listdir:传入需要合并的目录for every_name in os.listdir(f"E:/Python-file/进阶/pandas/资料/拆分文件"): # 将目录中每个文件的名称放在excel_names内 excel_names.append(every_name)print(excel_names) # 得到列表,每个文件的名字

# ⒉.分别读取到dataframe# 创建一个df空列表,用来存储每个小的dataframedf_list = []for every_name in excel_names: # 读取每个excel到df,构建它路径,输入传入的文件名字 excel_path = f"E:/Python-file/进阶/pandas/资料/拆分文件/{every_name}" # 读取数据到dataframe df_split = pd.read_excel(excel_path) # 提取每个处理文件用户的名字,得到username # 'file_0_xiao_shuai.xlsx':将前缀”file_“替换为空,后缀“.xlsx”替换为空,得到“0_xiao_shuai”,然后得到第二个元素“xiao_shuai” username = every_name.replace("file_", "").replace(".xlsx", "")[2:] print(every_name, username) # 给每个df添加1列,即用户名字 df_split["用户名称"] = username # 将df添加到空列表 df_list.append(df_split)

# 3.使用pd.concat进行合并df_merge = pd.concat(df_list) # 将几个列表合并# 查看df_merge的行列,以及前几行print(df_merge.shape)print(df_merge.head())# 查看6个人每个人的取值:前5个人每人6行,最后一个人4行print(df_merge["用户名称"].value_counts())

# 4.将合并后的dataframe输出到exceldf_merge.to_excel(f"E:/Python-file/进阶/pandas/资料/拆分合并文件/合并文件.xlsx", index=False)# 查看合并后的文件behind_fie = pd.read_excel("E:/Python-file/进阶/pandas/资料/拆分合并文件/合并文件.xlsx")print(behind_fie.head())



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3