Pandas合併excel文件錯位現象的解決

Pandas合併excel文件錯位現象的解決

一、文件錯位現象

在這裏插入圖片描述
在這裏插入圖片描述

說明:原本想將多列變爲一列,以便後續的可視化處理,但是合併後出現這樣的錯位

原本試圖通過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()

在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章