一、文件錯位現象
說明:原本想將多列變爲一列,以便後續的可視化處理,但是合併後出現這樣的錯位
原本試圖通過pandas的cancat()方法中的參數解決,但是沒有效果。
pandas的cancat()方法參數解釋,參見《pandas數據合併與重塑(pd.concat篇)》,鏈接: link.
二、原因
既然參數中找不到解決問題的原因,我就又重新複習了一遍cancat()方法。
原本以爲是excel文件索引的問題,即假設:第一個文件的列爲1-10,則合併的第二個文件的列索引應爲11-20,如此循環。
但是在其他的excel文件合併時,列索引可以相同,合併後依舊是沿着原列索引後面增加,完全不需要人工設置列索引之間的對齊。
重新看了一下表頭,發現合併後的excel是以原excel文件的表頭作爲新的彙總表的表頭的,接下來的排列也是如此,出現錯位,實質上是依據表頭的不同而不同的,
因爲問題的核心在文件的格式不同,即不是同一個數據集,或者說格式沒有整齊劃一,表頭沒有一致,這個是我的鍋,原本寫入excel中就是希望表頭後補可能更好合並
修改後,先寫入excel文件的表頭,保證每個excel文件的表頭一致,然後進行合併
三、解決
原來試圖簡化的代碼爲:
#ws.cell(row=1, column=1, value='分詞')
#ws.cell(row=1, column=2, value='頻率')
#ws.cell(row=1, column=3, value='文書名')
ws.cell(row=i + 1, column=1, value=datas[1][i][0])
ws.cell(row=i + 1, column=2, value=datas[1][i][1])
ws.cell(row=i + 1, column=3, value=datas[0])
將表頭的內容添加進去即可
ws.cell(row=1, column=1, value='分詞')
ws.cell(row=1, column=2, value='頻率')
ws.cell(row=1, column=3, value='文書名')
ws.cell(row=i + 1, column=1, value=datas[1][i][0])
ws.cell(row=i + 1, column=2, value=datas[1][i][1])
ws.cell(row=i + 1, column=3, value=datas[0])
生成的excel文件內容(沒有添加表頭前):
添加表頭後:
合併:
def xlsx_concat(self):
"""xlsx文檔合併"""
input_files = 'J:\PyCharm項目\項目\項目二_文書內容提取\輸出模塊\可視化輸出\\xslx寫入'
print('讀取到了第一個文件.............................................')
output_file = 'J:\PyCharm項目\項目\項目二_文書內容提取\輸出模塊\可視化輸出\\xslx寫入\\test彙總表.xlsx'
#需要創建,否則沒有輸出對象
print('讀取到了第二個文件.............................................')
all_workbook = glob.glob(os.path.join(input_files, '*.xlsx'))
#print(all_workbook)
data_frames = []
'''重點來了,遍歷工作簿、工作表,簿爲列表,表爲字典'''
for workbook in all_workbook:
all_sheets = pd.read_excel(workbook, sheet_name=None, index_col=None)
for worksheet_name, data in all_sheets.items():
data_frames.append(data)#sheets內容爲表名與表內容
all_data = pd.concat(data_frames)#axis即豎連接還是橫連接
print(data_frames)
writer = pd.ExcelWriter(output_file)
all_data.to_excel(writer, sheet_name='all_output', index=False)
writer.save()