问题描述
我只是 Phyton 的初学者。现在尝试使用phyton合并来自不同目录的excel文件。
我有一个如下所示的代码。然而,当执行时只读取一个文件,其他 2 个文件不会合并到最终的 excel 文件中。我应该在哪里更改代码?
预先感谢您的帮助。
真诚的 凯雷姆
import glob
import pandas as pd
import os
#path = r'E:\Users\KEREMH\.spyder-py3\20210326GecikmedekiMusteriler'
subelistesi = ['1140','1150','1190']
klasor_adi= input('Klasör Adı: ')
gonderilen ='gonderilen'
for sube in subelistesi:
path = os.path.join(os.getcwd(),sube,klasor_adi,gonderilen )
filenames = glob.glob(path + "/*.xlsx")
print(filenames)
for file in filenames:
concat_all_sheets_all_files = pd.DataFrame()
df = pd.read_excel(file,sheet_name=None,skiprows=None,nrows=None,usecols=None,header=None,index_col=None)
concat_all_sheets_single_file = pd.concat(df,sort=False)
concat_all_sheets_single_file['filename']=os.path.basename(file)
concat_all_sheets_all_files = concat_all_sheets_all_files.append(concat_all_sheets_single_file)
writer = pd.ExcelWriter(r'E:\Users\KEREMH\.spyder-py3\Konsolide.xlsx')
concat_all_sheets_all_files.to_excel(writer)
writer.save()
print(concat_all_sheets_all_files)
解决方法
当您遍历 subelistesi
时,只会保留 filenames
的最后一个值。更好的方法是在任何循环之前创建一个列表,并将所有数据帧添加到其中,然后在循环完成后进行连接。
import glob
import pandas as pd
import os
#path = r'E:\Users\KEREMH\.spyder-py3\20210326GecikmedekiMusteriler'
subelistesi = ['1140','1150','1190']
klasor_adi= input('Klasör Adı: ')
gonderilen ='gonderilen'
all_dfs = [] # new list here
for sube in subelistesi:
path = os.path.join(os.getcwd(),sube,klasor_adi,gonderilen )
filenames = glob.glob(path + "/*.xlsx")
print(filenames)
for file in filenames:
concat_all_sheets_all_files = pd.DataFrame()
df = pd.read_excel(file,sheet_name=None,skiprows=None,nrows=None,usecols=None,header=None,index_col=None)
df['filename'] = os.path.basename(file)
all_dfs.append(df)
concat_all_sheets_all_files = pd.concat(all_dfs,axis=0)
writer = pd.ExcelWriter(r'E:\Users\KEREMH\.spyder-py3\Konsolide.xlsx')
concat_all_sheets_all_files.to_excel(writer)
writer.save()
print(concat_all_sheets_all_files)