python合并多个excel或者CSV等文件

工作中经常碰到需要合并多个同样格式的Excel表格或者csv文件,一般可以用VBA,或者一些插件,不过用pyhton的代码很简单,速度也快

import os,time
import pandas as pd
from pandas import DataFrame
path=input("文件路径在什么地方")#把待合并的表格整齐的放在某个文件夹下
os.chdir(path)
list1=os.listdir() #如果把待合并的表格打开,有时候会目标文件夹下生成$开头的临时文件,会影响程序运行
t1=time.time()#可以计下时,分析下不同情况的导入效率
df=DataFrame( )
a=int(input("开头有几行"))#表头前面有几行,pandas导入时是默认有一个表头的,如果待合并的文件是没有表头的,就是header=None
b=int(input("结尾有几行"))#表尾后面有几行,有时候一些账单之类的表格,在表尾会有一些汇总或者说明。
for ex in list1:
    data=pd.read_excel(ex,encoding="gbk",header=a,)#可能不一定是excel(read_csv或者read_table),编码也可能不一定是gbk,这2项是要改的,实际导入的时候发现excel比pandas慢很多。
    if b != 0:
        data=data[0:-b]
    df=pd.concat([df,data],ignore_index=True,sort=False)   
#ignore_index=True,就是合并的时候不会管索引是不是一样,按照列名的相同上下合并就行        
df.to_excel((os.path.abspath(os.path.pardir))+"\\"+"合并.xlsx",index=False)#返回待合并文件的上一级目录,容易找到又不会对原始文件有什么变动;如果有超过15位的数字要先转换成文本,不然excel打开会变成科学计数法 df['列名称'] =df['列名称'].astype(str) ,导出也是Excel比csv慢很多      
t2=time.time()
print(t2-t1)

如果是合并CSV,那么用pd.read_csv或者pd.read_table,需要指定分隔符参数sep;
另外比较重要的一个参数是keep_default_na,如果表格中出现缺失值,如果=True,那么python会自动转化成NaN,如果只是做个合并,一般设置成False比较合适,原来表格中是空的,导入还是空的。
如果一个excel表格有多个sheet都有数据,需要调整下代码,read_excel时增加sheet_name=None,表示读取所有sheet

data=DataFrame()
for ex in list1:
    data_h=pd.read_excel(ex,encoding="gbk",header=a,sheet_name=None)
    for key in data_h.keys():  
        data_s=data_h[key]
        if b != 0:
            data_s=data_s[0:-b]
        data=pd.concat([data,data_s],ignore_index=True,sort=False) 
    df=pd.concat([df,data],ignore_index=True,sort=False)

你可能感兴趣的:(python合并多个excel或者CSV等文件)