Pandas_Excel文件的拆分合并

# 需求:将Excel中的任务均等分配给多个人?在Excel中新增一列分配任务的每个人的人名。

# 1)将一个大的Excel等扽拆成多个Excel,使用df.iloc方法,将一个大的dataframe,拆分成多个小的dataframe
# 将使用dataframe.to_excel保存每个小Excel
# 计算拆分后的每隔excel的行数

# 1.1)将一个大excel 拆分给这几个人
user_names = ['xiao_shuai', 'xiao_wang', 'xiaoming', 'xiao_lei', 'xiao_bo', 'xiao_hong']

# 1.2)计算每个人的任务数目 除法向下取整
split_size = total_row_count // len(user_names)
if total_row_count % len(user_names) != 0:
    split_size += 1
split_size

# 1.3)拆分成多个dataframe
df_subs = []
for idx, user_name in enumerate(user_names):
    begin = idx * split_size                    # iloc的开始索引 
    end = begin + split_size                    # iloc的结束索引
    df_sub = df_source.iloc[begin:end]          # 实现df按照iloc拆分
    df_subs.append((idx, user_name, df_sub))    # 将每个子df存入列表

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

# 2)合并多个小Excel到一个大Excel
# 2.1)遍历文件夹,得到要合并的Excel文件列表
excel_names = []
for excel_name in os.listdir(splits_dir):
    excel_names.append(excel_name)

# 2.2)分别读取到dataframe,给每个df添加一行用于标记来源
df_list = []
for excel_name in excel_names:
    excel_path = f'{splits_dir}/{excel_name}'
    df_split = pd.read_excel(excel_path)        
    user_name = excel_name.replace('split_', '').replace('.xlsx', '')[2:]
    print(excel_name, user_name)
    df_split['username'] = user_name            # 给每隔df添加1列,即用户名字
    df_list.append(df_split)

# 2.3)使用pd.concat进行df批量合并
df_merged = pd.concat(df_list)
df_merged['username'].value_counts()

# 2.4)将合并后的dataframe输出到excel
df_merged.to_excel(f'{work_dir}/merged_data.xlsx', index=False)

posted @ 2022-03-08 16:34  aall_blue  阅读(202)  评论(0)    收藏  举报