pandas 与 excel(二) python对excel表格的合并与拆分

利用pandas合并excel文件

一、多个xlsx文件合并

xlsx文件可为单sheet或多sheet混合

  • 导入os, pandas库
import os
import pandas as pd
  • 可采用函数的形式,将文件夹作为参数,不同情况下使用时,更改参数即可
  • 读取文件夹下所有文件,筛选出xlsx文件,将所有该格式文件汇总进列表做区分检验,利用read_excel读取所有xlsx文件的所有sheet为dataframe,将所有dataframe存入列表,然后合并
def Concat_excle(dir):
     #新建列表,存放文件名
    filename_list = []
    #新建列表,存放所有dataframe
    frames = []
    for root, dirs, files in os.walk(dir):
        #遍历文件夹,找出文件名拆分后缀带'xlsx'的文件
            for file in files:
                if os.path.splitext(file)[1] == '.xlsx':
                    filename_list.append(file)
                    #读取xlsx文件中所有sheet转换成DataFrame,也可视情况而定,只读取特定sheet
                    df = pd.read_excel(os.path.join(root,file), None) 
                   #将文件中所有工作表读入字典中
                    keys = list(df.keys())
                    for i in keys:
                        df_sheet = df[i]
                        frames.append(df_sheet) #将所有df更新进frame表中
                    
    #输出所有被合并的文件名
    print(filename_list)
    #合并所有dataframe
    result = pd.concat(frames)    
    print(pd.concat(frames))
    #将合并后的dataframe存为Excel文件,保存时去除索引
    result.to_excel(dir + '/huizong.xlsx',index = False)
    #合并输出完成
    print('~~~~~~~~~~~~~~~~DONE~~~~~~~~~~~~~~~~~~`')

#设置工作路径    
dir1 = r'D:/汇总'
Concat_excle(dir1)
  • 合并多个csv格式的数据集方法类似,因为没有多sheet的情况,和所有表均为单sheet等同,略做更改就行

xlsx文件均为单sheet 或 csv文件合并

def Concat_data(dir):
    
    filename_list = []
    frames = []
    
    for root, dirs, files in os.walk(dir):
            for file in files:
                if os.path.splitext(file)[1] == '.csv':
                    filename_list.append(file)
                    df = pd.read_csv(os.path.join(root,file)) 
                    frames.append(df) #将所有df更新进frame表中
                    
    #输出所有被合并的文件名
    print(filename_list)
    #合并所有dataframe
    result = pd.concat(frames)    
    print(pd.concat(frames))
    result.to_csv(dir + '/huizong.xlsx',index = False)
    #合并输出完成
    print('~~~~~~~~~~~~~~~~DONE~~~~~~~~~~~~~~~~~~`')
    
    
#设置工作路径    
dir1 = r'D:/汇总'
Concat_data(dir1)

二、拆分为多个xlsx文件

  • 读取数据后,用groupby方法分组拆分,再存入不同excel文件,也可以存入同一个excel文件的不同sheet。
import pandas as pd
import os
def Split_Excel(files,sheet_name):
    df1 = pd.read_excel(files,sheet_name= sheet)
    data = df1.copy()
    count = 0
    for i, df in data.groupby("经销商名称"):
        #df = df.copy() 
        #用groupby根据特定列分组,拆分后可以选择保留该列,不需要可以删除
        df.drop(['经销商名称'],axis=1,inplace=True)
        #将拆开得到的df分别保存为xlsx文件
        df.to_excel(r'D:\ceshi\split_excels\%s.xlsx'%(i),index=False)
        count += 1
        print ('~~~~~~~正在拆分第 %d 张表~~~~~~~' %count)
    print('~~~共拆分为 %d 张表~~~' %count)
    
path_load = r'D:\ceshi'
path_file = 'total_excel.xlsx'
path = os.path.join(path_load,path_file)
sheet1 = '销售'

Split_Excel(path,sheet1)

你可能感兴趣的:(python,pandas,python,excel)