2017-10-25 8 views
0

私はPandasを使用して非常に単純なように思えますが、固まっているものを磨くことを試みています。 複数のスプレッドシート(​​複数のシートを含む)をすべてのシートを含む1つのMasterSpreadSheetにマージしたい。ここでPython Pandas - 複数のシートを含む複数のスプレッドシートを、すべてのシートを含む単一のMasterSpreadsheetにマージする

input example: 
spreadsheet1 -> sheetname_a, sheetname_b, sheetname_c, sheetname_d 
spreadsheet2 -> sheetname_a, sheetname_b, sheetname_c, sheetname_d 
spreadsheet3 ...... 

output desired: 
one single file with the data from all spreadsheets separated by the especific sheetname 
MasterSpreadSheet -> sheetname_a, sheetname_b, sheetname_c, sheetname_d 

はその単一MasterSpreadSheetを生成し、私のコードですが、それは最後のスプレッドシートからのデータだけでマスターファイルを残して、以前のスプレッドシートのデータを上書きします:

with pd.ExcelWriter(outputfolder + '/' + country + '-MasterSheet.xlsx') as writer: 

    for spreadsheet in glob.glob(os.path.join(outputfolder, '*-Spreadsheet.xlsx')): 
      sheets = pd.ExcelFile(spreadsheet).sheet_names 
      for sheet in sheets: 
       df = pd.DataFrame() 
       sheetname = sheet.split('-')[-1] 
       data = pd.read_excel(spreadsheet, sheet) 
       data.index = [basename(spreadsheet)] * len(data) 
       df = df.append(data) 
       df.to_excel(writer, sheet_name = sheetname) 

      writer.save() 
      writer.close() 

提案?

ありがとうございました!

+0

問題がパンダExcelWriter、httpsであるようです。 com/pandas-dev/pandas/issues/3441 –

答えて

0

これは現在動作しています:)ループおよびシートによる最初のシートを追加し、スプレッドシートファイルに続いて、またシートループの最後でパンダの連結を追加していています:// githubの:

df1 = [] 
sheet_list = [] 
sheet_counter = 0 
with pd.ExcelWriter(outputfolder + '/' + country + '-MasterSheet.xlsx') as writer: 

    for template in glob.glob(os.path.join(templatefolder, '*.textfsm')): 
     template_name = template.split('\\')[-1].split('.textfsm')[0] 
     sheet_list.append(template_name) ## List of Sheets per Spreadsheet file 

    for sheet in sheet_list: 
     for spreadsheet in glob.glob(os.path.join(outputfolder, '*-Spreadsheet.xlsx')): 
      data = pd.read_excel(spreadsheet, sheet_counter) 
      data.index = [basename(spreadsheet)] * len(data) 
      df1.append(data) 
     df1 = pd.concat(df1)  
     df1.to_excel(writer, sheet) 
     df1 = [] 
     sheet_counter += 1 ##Adding a counter to get the next Sheet of each Spreadsheet 
関連する問題