使用Python處理Excel檔案的一些程式碼示例
阿新 • • 發佈:2018-11-16
筆記:使用Python處理Excel檔案的一些程式碼示例,以下程式碼來自於《Python資料分析基礎》一書,有刪改
#!/usr/bin/env python3 # 匯入讀取Excel檔案的庫,xlrd,其中的 open_workbook 為讀取工作簿 from xlrd import open_workbook input_file = 'D:\wangm\Documents\learning\code\python\data_row.xlsx' # open_workbook(input_file) 開啟一個工作簿 workbook = open_workbook(input_file)# 輸出此工作簿中有多少個表 workbook.nsheets print('Number of worksheets: ', workbook.nsheets) # 遍歷工作簿中的每張表 for worksheet in workbook.sheets(): # 分別輸出每張表的名字、行數、列數 print('Worksheet name: ', worksheet.name, '\tRows: ', worksheet.nrows, '\tColumns: ', worksheet.ncols)
# 處理單個工作簿 #!/usr/bin/env python3 # 匯入讀取Excel檔案的庫,xlrd,其中的 open_workbook 為讀取工作簿from xlrd import open_workbook # 匯入寫工作簿的庫 from xlwt import Workbook input_file = 'D:\wangm\Documents\learning\code\python\data_row.xlsx' output_file = 'D:\wangm\Documents\learning\code\python\data_out.xlsx' # 建立一個Workbook物件 output_workbook = Workbook() # 向output_workbook中新增一種名為'out_data_sheet_1'的表 output_wb_sheet = output_workbook.add_sheet('out_data_sheet_1') with open_workbook(input_file) as workbook: # 通過名字選取工作簿中的某個表,也可以使用索引值選定 worksheet = workbook.sheet_by_name('supplier_data') # worksheet = workbook.sheet_by_index(0) # 通過行、列索引值遍歷工作簿中指定表的每一個值 for row_index in range(worksheet.nrows): for column_index in range(worksheet.ncols): # 向工作簿中的一個選取的表(output_wb_sheet)的通過索引指定的單元格(row_index, column_index)中寫入一個值 output_wb_sheet.write(row_index, column_index, worksheet.cell_value(row_index, column_index)) # 將該工作簿儲存為 output_file output_workbook.save(output_file)
#!/usr/bin/env python3 # 匯入讀取Excel檔案的庫,xlrd,其中的 open_workbook 為讀取工作簿 from xlrd import open_workbook input_file = 'D:\wangm\Documents\learning\code\python\data_row.xlsx' # open_workbook(input_file) 開啟一個工作簿 workbook = open_workbook(input_file) # 輸出此工作簿中有多少個表 workbook.nsheets print('Number of worksheets: ', workbook.nsheets) # 遍歷工作簿中的每張表 for worksheet in workbook.sheets(): # 分別輸出每張表的名字、行數、列數 print('Worksheet name: ', worksheet.name, '\tRows: ', worksheet.nrows, '\tColumns: ', worksheet.ncols)
# 處理單個工作簿 #!/usr/bin/env python3 # 匯入讀取Excel檔案的庫,xlrd,其中的 open_workbook 為讀取工作簿 from xlrd import open_workbook # 匯入寫工作簿的庫 from xlwt import Workbook input_file = 'D:\wangm\Documents\learning\code\python\data_row.xlsx' output_file = 'D:\wangm\Documents\learning\code\python\data_out.xlsx' # 建立一個Workbook物件 output_workbook = Workbook() # 向output_workbook中新增一種名為'out_data_sheet_1'的表 output_wb_sheet = output_workbook.add_sheet('out_data_sheet_1') with open_workbook(input_file) as workbook: # 通過名字選取工作簿中的某個表,也可以使用索引值選定 worksheet = workbook.sheet_by_name('supplier_data') # worksheet = workbook.sheet_by_index(0) # 通過行、列索引值遍歷工作簿中指定表的每一個值 for row_index in range(worksheet.nrows): for column_index in range(worksheet.ncols): # 向工作簿中的一個選取的表(output_wb_sheet)的通過索引指定的單元格(row_index, column_index)中寫入一個值 output_wb_sheet.write(row_index, column_index, worksheet.cell_value(row_index, column_index)) # 將該工作簿儲存為 output_file output_workbook.save(output_file)
#!/usr/bin/env python3 import pandas as pd input_file = 'D:\wangm\Documents\learning\code\python\data_row.xlsx' output_file = 'D:\wangm\Documents\learning\code\python\data_out_pd.xlsx' # pd.read_excel() 讀取一個Excel檔案,並指定選中其中的某張表,將其變為一個”資料框“物件 data_frame = pd.read_excel(input_file, sheetname='supplier_data') # 建立一個Excel檔案 writer = pd.ExcelWriter(output_file) # 將data_frame轉為Excel檔案,並寫入輸出檔案 data_frame.to_excel(writer, sheet_name='supplier_data', index=False) # 儲存輸出檔案 writer.save()
# 20181115 # 篩選特定的行 # 在基本Python中: # 類似於之前處理CSV檔案,無非是改變了讀寫檔案的函式,過程都是去每一行的值,篩選出符合條件的行 # 儲存下來,然後寫入Excel檔案 # 下面給出使用pandas庫來篩選 #!/usr/bin/env python3 import pandas as pd input_file = 'D:\wangm\Documents\learning\code\python\data_row.xlsx' output_file = 'D:\wangm\Documents\learning\code\python\data_out_pd.xlsx' data_frame = pd.read_excel(input_file, 'supplier_data', index_col=None) # 篩選出Cost值大於500的行,將標題行和這些行作為一個新的‘資料框’物件 # 下面這條用於篩選的語句,通過列名作為索引去除Cost的值,並將其轉換為float在進行比較,比較結果為真的行留了下來 # 缺陷:將Cost的值的 $ 的符號丟掉了 #data_frame_value_meets_condition = data_frame[data_frame['Cost'].astype(float) > 500.0] writer = pd.ExcelWriter(output_file) #data_frame_value_meets_condition.to_excel(writer, sheet_name='supplier_data', index=False) #writer.save() # 還可以篩選出某一列中的值屬於某個特定集合的行 important_dates = ['1/1/2018', '3/1/2018'] data_frame_value_in_set = data_frame[data_frame['Date'].isin(important_dates)] data_frame_value_in_set.to_excel(writer, sheet_name='supplier_data', index=False) writer.save() # 此處寫入後也將Cost的值的 $ 的符號丟掉了,起初我認為是因為被轉換為float時的原因,然而此處卻發現不是,那到底是為什麼? # 類似於處理CSV檔案,pandas在處理Excel檔案時,也有類似於使用RE篩選的函式 # 此處就產生一個疑問,pandas讀取CSV檔案、Excel檔案後得到的物件為何如此相似?希望在後面具體瞭解pandas庫時得到答案
選取特定的列
類似於處理CSV檔案時的情況
讀取多個Excel檔案時,類似於前面處理CSV檔案時的情況,使用glob
以上程式碼示例分別使用基本Python和pandas庫處理Excel檔案,執行在Python3.6 Win10上的Spyder下
相關庫文件: