日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

利用Python pandas對Excel進行合并的方法示例

瀏覽:27日期:2022-07-06 14:04:49

前言

在網上找了很多Python處理Excel的方法和代碼,都不是很盡人意,所以自己綜合網上各位大佬的方法,自己進行了優化,具體的代碼如下。

博主也是新手一枚,代碼肯定有很多需要優化的地方,歡迎各位大佬提出建議~

代碼我自己已經用了一段時間,可以直接拿去用

主要功能

按行合并 ,即保留固定的表頭(如前幾行),實現多個Excel相同格式相同名字的表單按縱軸合并; 按列合并。 即保留固定的首列,實現多個Excel相同格式相同名字的表單按橫軸合并; 表單集成 ,實現不同Excel中相同sheet的集成(即不匯總,僅集成到同一個新的Excel中)。此處的代碼稍微改一下即可實現不同Excel中所有sheet的集成; 自動檢測所需合并的sheet名稱是否出現在所有的目標文件中,如果不是則予以提示 ; sheet選擇、表頭選擇、功能選擇界面實現可視化; 合并后進行簡單的缺省值處理、格式處理 解決MacOS系統下文件目錄中出現.DS_Store隱藏文件導致程序出錯的bug。

用到的庫

pandas 、tkinter 、 pathlib、os 、 xlrd

代碼

import pandas as pdimport tkinter as tkfrom tkinter import filedialogimport pathlibimport osimport xlrd# 選擇文件夾對話框,窗口交互,打開選擇窗口filedirectory = filedialog.askdirectory()p1 = pathlib.Path(filedirectory) # 該部分主要為了獲取目標路徑下的文件名print(p1)bookname1 = os.listdir(p1) # 返回目標文件夾下的所有文件名if '.DS_Store' in bookname1: bookname1.remove(’.DS_Store’)# 刪除文件名里的.xlsxbookname = []for n in bookname1: n1 = list(n) # 把字符變成列表 for i in range(5): # 因為去除的是.XSLX,5個字符,可以根據實際需要修改 n1.pop() # 依次刪除最后一個元素 n2 = ’’.join(n1) # 把列表變成字符 bookname.append(n2)excles = p1.rglob(’*.xlsx’) # 類似于os.work,能夠返回目標路徑下的文件路徑,并且可以添加條件excelarr = []for eachexcel in excles: excelarr.append(eachexcel) # 創建目標路徑下特定文件名的列表# 建立一個交互窗口windows = tk.Tk()windows.title(’請提供如下信息’) # 設置文本框的標題windows.geometry(’1000x300’) # 設置界面的大小# tk.Label(windows, text=’你好!this is Tkinter’, bg=’green’, font=(’Arial’, 12), width=30, height=2)# 說明:bg為背景,font為字體,width為長,height為高,這里的長和高是字符的長和高,比如height=2,就是標簽有2個字符這么高)tk.Label(windows, text=’請輸入想要合并的sheet名稱:’).grid(row=0, column=0) # label用來顯示不可編輯的文本和圖標(提示性文字)tk.Label(windows, text=’請輸入想要確定的表頭行數:’).grid(row=1, column=0)tk.Label(windows, text=’請輸入您想實現的功能,1為按行合并sheet,2為按列合并sheet,3為sheet匯總:’).grid(row=2, column=0)# Listbox(dict={}) # 創建可選下拉框e1 = tk.Entry(windows) # 創建輸入框e2 = tk.Entry(windows) # 創建第2個輸入框e3 = tk.Entry(windows)e1.grid(row=0, column=1, padx=10, pady=5)e2.grid(row=1, column=1, padx=10, pady=5)e3.grid(row=2, column=1, padx=10, pady=5)tk.Button(windows, text=’點擊繼續’, width=10, command=windows.quit) .grid(row=4, column=1, sticky=tk.E, padx=10, pady=5) # sticky表示方位,NSWE為上下左右tk.mainloop() # 結束循環# 為變量賦值word = str(e1.get())number = int(e2.get()) - 1choice = int(e3.get())# 檢查想要處理的sheet是否在所有的目標文件中file_list = os.listdir(p1)file_list.remove(’.DS_Store’) # 移除Mac系統自動生成的文件for file in file_list: # 循環遍歷列出所有文件名稱 file_name = os.path.join(p1, file) # 因os.listdir工具返回的是目標文件夾里文件的名字,然而打開文件需要文件路徑+名字,故通過此工具獲取完整的文件名 workbook = xlrd.open_workbook(file_name) # 打開遍歷的文件 if word in workbook.sheet_names(): continue else: print(str(file) + ’中不存在想要合并的sheet’)if choice == 2: p1 = pd.ExcelFile(excelarr[0]) # 讀取獲取到的第一個文件名對應的文件 mergedata1 = p1.parse(header=number, sheet_name=word).iloc[:, 0] # 設置索引為第一行,如果為index_col,則索引為第一列 iloc為取特定的列 p2 = [] for i in range(0, len(excelarr)): tmp = pd.ExcelFile(excelarr[i]) # 讀取文件 currentdata = tmp.parse(header=number, sheet_name=word).iloc[:, [1, 2, 3, 4]] # 讀取特定的列 mergedata1 = pd.concat([mergedata1, currentdata], axis=1) # concat連接函數,唯一必須的參數是參與連接的對象的列表或字典。axis=1,表示可以按照縱軸來合并 n = currentdata.shape[1] # 返回Dataframe的行數,1為返回列數 p2.append(n) # 獲取讀取文件的行數列表 name_list = [] i = 0 # 獲取應插入的文件名的列表 for a1 in bookname: for x in range(p2[i]): name_list.append(a1) i = i + 1 name_list.insert(0, ’來自表格’) mergedata1.loc[-1] = name_list # 按行插入if choice == 1: p1 = pd.ExcelFile(excelarr[0]) # 讀取獲取到的第一個文件名對應的文件 mergedata1 = p1.parse(header=number, sheet_name=word) # 設置索引為第一行,如果為index_col,則索引為第一列 p2 = [] p2.append(mergedata1.shape[0]) for i in range(1, len(excelarr)): tmp = pd.ExcelFile(excelarr[i]) # 讀取文件 currentdata = tmp.parse(header=number, sheet_name=word) # 讀取特定的表 mergedata1 = pd.concat([mergedata1, currentdata]) # concat連接函數,唯一必須的參數是參與連接的對象的列表或字典。axis=1,表示可以按照縱軸來合并 n = currentdata.shape[0] # 返回Dataframe的行數,1為返回列數 p2.append(n) # 獲取讀取文件的行數列表 name_list = [] i = 0 # 獲取應插入的文件名的列表 for a1 in bookname: for x in range(p2[i]): name_list.append(a1) i = i + 1 mergedata1.insert(0, ’來自表格’, name_list) # 插入第一列,作為表格數據來源的注釋if choice == 3: i = 0 fname = tk.filedialog.asksaveasfilename(title=u’保存文件’, filetypes=[('excel', '.xlsx')]) # fideialog的一個方法,可以實現數據儲存是要保存的名字 writerExcel = pd.ExcelWriter(fname+’.xlsx’) # 寫入到一個新的Excel,并且命名為上一步驟確認的名字 for name in bookname: p1 = pd.ExcelFile(excelarr[i]) mergedata1 = p1.parse(header=number, sheet_name=word) # 設置索引為第一行,如果為index_col,則索引為第一列 # mergedata1.dropna(thresh=4, inplace=True) # 必須使用inplace才可以使數據庫記住刪除的單元格 # mergedata1.dropna(axis=’columns’, how=’all’) # 刪除全是缺失值的列 mergedata1.fillna(’0’) # 將所有缺失值填充為0 mergedata1.to_excel(writerExcel, sheet_name=name, index=False) # 新建一個sheet儲存信息 i = i + 1if choice != 3: # 數據清理 mergedata1.dropna(thresh=4, inplace=True) # 必須使用inplace才可以使數據庫記住刪除的單元格 mergedata1.dropna(axis=’columns’, how=’all’) # 刪除全是缺失值的列 mergedata1.fillna(’0’) # 將所有缺失值填充為0 # 保存至excel fname = tk.filedialog.asksaveasfilename(title=u’保存文件’, filetypes=[('excel', '.xlsx')]) # fideialog的一個方法,可以實現數據儲存是要保存的名字 writerExcel = pd.ExcelWriter(fname + ’.xlsx’) # 寫入到一個新的Excel,并且命名為上一步驟確認的名字 mergedata1.to_excel(writerExcel, sheet_name=’匯總表’, index=False) # 將之前匯總的farmdate數據通過to excel寫入到Excel中# 設置格式sheetname = writerExcel.sheetsworkbook = writerExcel.bookfor sheets in sheetname: worksheet = writerExcel.sheets[sheets] format1 = workbook.add_format({’num_format’: ’###,##0.00’, }) # 通過xlsxwriter模塊命名format1的格式,對于數字內容,每三位進行一個分隔符,并且保留兩位小數。#.00%為保留兩位小數的百分數.border為邊框。最后為文本換行和居中 # format2 = workbook.add_format({’bold’: True, ’italic’: True}) # 加粗、斜體 worksheet.set_column(’A:ZZ’, 16, format1) # 將上述定義的格式應用到具體的單元格 # worksheet.set_row(0, 16, format2) # 將特定格式用于表頭writerExcel.save() # 保存Excelprint(’success’)

總結

到此這篇關于利用Python pandas對Excel進行合并的文章就介紹到這了,更多相關Python pandas對Excel合并內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国内精品自在自线400部| 亚洲人妖在线| 日韩黄色在线观看| 中文字幕一区二区三区日韩精品| 黄色亚洲精品| 欧美va亚洲va日韩∨a综合色| 久久99久久久精品欧美| 日韩二区三区在线观看| 婷婷综合成人| 久久国产尿小便嘘嘘| 国产精品地址| 福利一区在线| 成人久久久久| 黑丝一区二区| 中文字幕日本一区| 欧美一区在线观看视频| 国产伦精品一区二区三区千人斩 | 欧美亚洲国产激情| 91精品推荐| 亚洲激情社区| 麻豆久久精品| 综合视频一区| 久久成人高清| 日本久久成人网| 丝袜美腿高跟呻吟高潮一区| 日本成人在线不卡视频| 国产精品hd| 国产欧洲在线| 亚洲精品中文字幕乱码| 国产精品视区| 亚洲精品免费观看| 久久不卡国产精品一区二区| 日韩欧美一区二区三区在线视频| 欧美日韩少妇| 日韩av网站在线观看| 久久精品国产网站| 久久精品影视| 亚洲免费成人av在线| 欧美激情福利| 久久精品高清| 日韩欧美三区| 色婷婷色综合| 老鸭窝亚洲一区二区三区| 日韩av电影一区| 高清久久一区| 国产麻豆综合| 欧美日韩1区2区3区| 日韩国产激情| 日韩在线网址| 午夜精品成人av| 亚洲精品一二| 伊人网在线播放| 亚洲一区二区三区无吗| 久久99国产精品视频| 亚洲激情社区| 美女国产一区二区三区| 在线国产一区二区| 国产精品探花在线观看| 欧美亚洲精品在线| 国产伦理久久久久久妇女| 99精品视频在线观看免费播放| 蜜桃一区二区三区在线观看| 久久久久观看| 激情综合网站| 久久不见久久见国语| 午夜国产一区二区| 国产欧美一区二区色老头| 国精品一区二区三区| 国产精品亚洲片在线播放| 一区免费在线| 精品入口麻豆88视频| 综合一区二区三区| 三级小说欧洲区亚洲区| 国产午夜精品一区在线观看| 欧美日韩精品一本二本三本| 国产一区二区三区不卡av| 在线一区视频| 精品成av人一区二区三区| 亚洲精一区二区三区| 久久九九国产| 精品国产a一区二区三区v免费| 日韩中文字幕一区二区高清99| 免费国产自久久久久三四区久久| 老牛国内精品亚洲成av人片| 亚洲一级淫片| 国产精品99一区二区| 国产一区二区三区探花| 欧美三区不卡| 亚洲深夜福利在线观看| 亚洲二区在线| 国产aⅴ精品一区二区四区| 亚洲尤物av| 婷婷综合社区| 日韩一区自拍| 国产精品成人a在线观看| 国产日韩中文在线中文字幕| 亚洲精品综合| 视频在线在亚洲| 久久九九精品| 新版的欧美在线视频| 精品欧美视频| 国产毛片久久久| 日本精品在线播放| 亚洲影视一区| 日韩精品一二区| 夜夜精品视频| 午夜精品成人av| 最近高清中文在线字幕在线观看1| 国产欧美在线观看免费| 亚州av一区| 一区二区国产在线| 久久福利毛片| 久久av在线| 国产精品日韩久久久| 欧美理论视频| 亚洲午夜精品久久久久久app| а√天堂8资源在线| 国产精品精品国产一区二区| 老牛国内精品亚洲成av人片| 麻豆国产精品视频| 日本欧美国产| 麻豆精品久久久| 国产精品探花在线观看| 国产免费av国片精品草莓男男| 亚洲免费毛片| 日本一区二区中文字幕| 婷婷五月色综合香五月| 亚洲精品动态| 日韩一二三区在线观看| 欧美久久香蕉| 欧美国产专区| 国产一区二区视频在线看| 狠狠躁少妇一区二区三区| 亚洲精品福利电影| 三级精品视频| 亚洲激情久久| 日韩视频二区| 亚洲色图网站| 青青青国产精品| 国产精品一区二区美女视频免费看| 日韩高清不卡在线| 国产精品欧美三级在线观看 | 亚洲免费福利一区| 91亚洲精品在看在线观看高清| 国产一精品一av一免费爽爽| 国产精东传媒成人av电影| 久久精品伊人| jizzjizz中国精品麻豆| 99精品在线观看| 久久夜色精品| 中文字幕亚洲影视| 国产免费av国片精品草莓男男| 久久香蕉精品香蕉| 欧美日韩尤物久久| 亚洲一区二区毛片| 石原莉奈一区二区三区在线观看| 亚洲精品在线二区| 精品深夜福利视频| 久久精品青草| 视频一区视频二区中文| 日韩精品三区四区| 精品一区不卡| 亚洲午夜久久久久久尤物 | 欧美精品一区二区三区精品| 亚洲欧美日韩综合国产aⅴ| 亚洲一级大片| 麻豆91在线播放| 激情欧美亚洲| 青草国产精品| 日韩一区欧美| 日本 国产 欧美色综合| 国产日韩欧美一区二区三区在线观看| 福利视频一区| 亚洲欧美日韩国产一区| 国产日韩欧美一区二区三区| 日韩成人亚洲| 亚洲日本欧美| 国产精品99一区二区三区| 亚洲国产综合在线看不卡| 日本一不卡视频| 色综合www| 亚洲精品进入| 另类专区亚洲| 日本亚洲欧美天堂免费| 精品丝袜久久| 亚洲综合精品| 加勒比视频一区| 久色成人在线| 美女av在线免费看| 亚洲精品观看| 日韩精品免费一区二区三区| 日韩欧美中文在线观看| 久久男女视频| 日韩欧美久久| 国产字幕视频一区二区| 国产精品中文字幕制服诱惑| 婷婷综合社区| 国产精品99视频| 日本午夜精品| 久久国产电影|