1. 程式人生 > >使用Python處理Excel檔案的一些程式碼示例

使用Python處理Excel檔案的一些程式碼示例

筆記:使用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下

相關庫文件:

xlrd

xlwt