使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM