本文首發於公衆號「AntDream」,歡迎微信搜索「AntDream」或掃描文章底部二維碼關注,和我一塊兒天天進步一點點bash
Python的一大應用就是數據分析了,而數據分析中,常常碰到須要處理Excel數據的狀況。這裏作一個Python處理Excel數據的總結,基本受用大部分狀況。相信之後用Python處理Excel數據再也不是難事兒!微信
Python處理Excel數據須要用到2個庫:
xlwt
和xlrd
。xlwt
庫負責將數據導入生成Excel表格文件,而xlrd
庫則負責將Excel表格中的數據取出來。markdown
xlwt
庫將數據導入Excelwb = xlwt.Workbook() # 添加一個表 ws = wb.add_sheet('test') # 3個參數分別爲行號,列號,和內容 # 須要注意的是行號和列號都是從0開始的 ws.write(0, 0, '第1列') ws.write(0, 1, '第2列') ws.write(0, 2, '第3列') # 保存excel文件 wb.save('./test.xls') 複製代碼
能夠看到,用xlwt
庫操做很是簡單,基本就三步走:字體
Workbook
對象,並用add_sheet
方法添加一個表write
方法寫入數據save
方法保存須要注意的是,
xlwt
庫裏面所定義的行和列都是從0
開始計數的spa
表格樣式通常主要有這麼幾塊內容:字體、對齊方式、邊框、背景色、寬度以及特殊內容,好比超連接、日期時間等。下面咱們來分別看看用xlwt
庫怎麼定製這些樣式。excel
xlwt
庫支持的字體屬性也比較多,大概以下: code
設置字體須要用到xlwt
庫的XFStyle
類和Font
類,代碼模版以下:orm
style = xlwt.XFStyle() # 設置字體 font = xlwt.Font() # 好比設置字體加粗和下劃線 font.bold = True font.underline = True style.font = font # 而後應用 ws.write(2, 1, 'test', style) 複製代碼
後續幾個屬性的設置都是相似的,都是4步走:對象
XFStyle
Font
對象write
方法寫入數據的時候應用就行先來看單元格對齊怎麼設置索引
# 單元格對齊 alignment = xlwt.Alignment() # 水平對齊方式和垂直對齊方式 alignment.horz = xlwt.Alignment.HORZ_CENTER alignment.vert = xlwt.Alignment.VERT_CENTER # 自動換行 alignment.wrap = 1 style.alignment = alignment # 而後應用 ws.write(2, 1, 'test', style) 複製代碼
上面這個自動換行的屬性仍是蠻有用的,由於咱們不少時候數據會比較長,最好再加上單元格的寬度屬性一塊兒使用,這樣總體樣式會好不少
單元格寬度設置:
# 設置單元格寬度,也就是某一列的寬度 ws.col(0).width = 6666 複製代碼
背景色對應的屬性是 Pattern
# 背景色 pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 背景色爲黃色 # 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, # 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , # almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray # ... pattern.pattern_fore_colour = 5 style.pattern = pattern # 而後應用 ws.write(2, 1, 'test', style) 複製代碼
邊框屬性是Borders
單元格邊框就2類:顏色和邊框線樣式
能夠分別設置上下左右邊框的顏色和樣式
# 邊框 borders = xlwt.Borders() # 邊框能夠分別設置top、bottom、left、right # 每一個邊框又能夠分別設置顏色和線樣式:實線、虛線、無 # 顏色設置,其餘相似 borders.left_colour = 0x40 # 設置虛線,其餘相似 borders.bottom = xlwt.Borders.DASHED style.borders = borders # 而後應用 ws.write(2, 1, 'test', style) 複製代碼
特殊內容通常主要會碰到這幾類:超連接、公式和時間日期
處理這些特殊內容須要用到Formula
# 超連接 link = 'HYPERLINK("http://www.baidu.com";"Baidu")' formula = xlwt.Formula(link) ws.write(2, 0, formula) # 公式也是相似 ws.write(1, 1, xlwt.Formula('SUM(A1,B1)')) # 時間 style.num_format_str = 'M/D/YY' ws.write(2, 1, datetime.datetime.now(), style) 複製代碼
以上就是用Python將數據寫入到Excel的所有內容了,下面咱們再來看看怎麼讀取Excel中的數據作處理。
xlrd
庫讀取Excel中的數據一樣的用xlrd
庫讀取Excel的數據也是輕輕鬆鬆,先來看下實現代碼
# 先打開一個文件 wb = xlrd.open_workbook(file_path) # 獲取第一個表 sheet1 = wb.sheet_by_index(0) # 總行數 nrows = sheet1.nrows # 總列數 ncols = sheet1.ncols # 後面就經過循環便可遍歷數據了 # 取數據 for i in range(nrows): for j in range(ncols): # cell_value方法取出第i行j列的數據 value = sheet1.cell_value(i, j) print(value) 複製代碼
總結一下,分爲一下幾步:
xlrd
庫的open_workbook
方法打開Excel文件sheet_by_index
方法獲取表cell_value
方法獲取每一個單元格中的數據獲取一個工做表,有多種方式
# 經過索引 sheet1 = wb.sheets()[0] sheet1 = wb.sheet_by_index(0) # 經過名字 sheet1 = wb.sheet_by_name('test') # 獲取全部表名 # sheet_names = wb.sheet_names() 複製代碼
獲取某一行或某一列的全部數據
# 獲取行中全部數據,返回結果是一個列表 tabs = sheet1.row_values(rowx=0, start_colx=0, end_colx=None) # 返回一行一共有多少數據 len_value = sheet1.row_len(rowx=0) 複製代碼
row_values
的三個參數分別是:行號、開始的列和結束的列,其中結束的列爲None
表示獲取從開始列到最後的全部數據
相似的還有獲取某一列的數據
cols = sheet1.col_values(colx=0, start_rowx=0, end_rowx=None)
複製代碼
時間數據比較特殊,沒發直接經過上面的cell_value
方法獲取。須要先轉換爲時間戳,而後再格式化成咱們想要的格式。
好比要獲取Excel表格中,格式爲2019/8/13 20:46:35
的時間數據
# 獲取時間 time_value = sheet1.cell_value(3, 0) # 獲取時間戳 time_stamp = int(xlrd.xldate.xldate_as_datetime(time_value, 0).timestamp()) print(time_stamp) # 格式化日期 time_rel = time.strftime("%Y/%m/%d", time.localtime(time_stamp)) print(time_rel) 複製代碼
基本也是三步走:
cell_value
方法獲取時間值xldate_as_datetime
方法獲取時間戳Excel文件是用Python處理數據時常會碰到的一類場景,有了xlwt
和 xlrd
的幫助能夠很是快速的導入和導出Excel數據。你們能夠把這篇文章收藏起來,之後碰處處理Excel文件的時候能夠參考一下。
歡迎關注個人公衆號查看更多精彩文章!
複製代碼