小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python 進(jìn)階(六): Excel 基本操作

 文炳春秋 2020-03-13

1. 概述

在現(xiàn)實(shí)中,很多工作都需要與數(shù)據(jù)打交道,Excel 作為常用的數(shù)據(jù)處理工具,一直備受人們的青睞,而大部分人都是手動(dòng)操作 Excel,如果數(shù)據(jù)量較小且是一些簡(jiǎn)單的操作還好說(shuō),但如果數(shù)據(jù)量較大或是一些復(fù)雜的操作,工作量可想而知,因此,我們需要掌握一種簡(jiǎn)單、高效的方法來(lái)操作 Excel。

在數(shù)據(jù)處理方面,Python 一直扮演著重要的角色,對(duì)于 Excel 操作,它有著完整且成熟的第三方庫(kù),使用也較為簡(jiǎn)單。

Python 中常用 Excel 操作庫(kù)如下:

  • xlrd:從 Excel 中讀取數(shù)據(jù),支持 xls、xlsx。

  • xlwt:向 Excel 中寫(xiě)入數(shù)據(jù),支持 xls。

  • xlutils:提供了一些 Excel 的實(shí)用操作,比如復(fù)制、拆分、過(guò)濾等,通常與 xlrd、xlwt 一起使用。

  • XlsxWriter:向 Excel 中寫(xiě)入數(shù)據(jù),支持 xlsx。

  • openpyxl :用于讀寫(xiě) Excel,支持 xlsx。

2. 寫(xiě)入

我們向 Excel 中寫(xiě)入一些數(shù)據(jù)。

2.1 使用 xlwt

通過(guò) pip install xlwt 命令安裝。

import xlwt

# 創(chuàng)建工作簿
wb = xlwt.Workbook()
# 創(chuàng)建表單
sh = wb.add_sheet('test')
# 創(chuàng)建字體對(duì)象
font = xlwt.Font()
# 字體加粗
font.bold = True
alm = xlwt.Alignment()
# 設(shè)置左對(duì)齊
alm.horz = 0x01
# 創(chuàng)建樣式對(duì)象
style1 = xlwt.XFStyle()
style2 = xlwt.XFStyle()
style1.font = font
style2.alignment = alm
# write 方法參數(shù)1:行,參數(shù)2:列,參數(shù)3:內(nèi)容
sh.write(0, 1, '姓名', style1)
sh.write(0, 2, '年齡', style1)
sh.write(1, 1, '張三')
sh.write(1, 2, 50, style2)
sh.write(2, 1, '李四')
sh.write(2, 2, 30, style2)
sh.write(3, 1, '王五')
sh.write(3, 2, 40, style2)
sh.write(4, 1, '趙六')
sh.write(4, 2, 60, style2)
sh.write(5, 0, '平均年齡', style1)
# 保存
wb.save('test.xls')

執(zhí)行結(jié)果:

2.2 使用 XlsxWriter

通過(guò) pip install XlsxWriter 命令安裝。

import xlsxwriter

# 創(chuàng)建工作簿
workbook = xlsxwriter.Workbook('test.xlsx')
# 創(chuàng)建表單
sh = workbook.add_worksheet('test')
fmt1 = workbook.add_format()
fmt2 = workbook.add_format()
# 字體加粗
fmt1.set_bold(True)
# 設(shè)置左對(duì)齊
fmt2.set_align('left')
# 數(shù)據(jù)
data = [
    ['', '姓名', '年齡'],
    ['', '張三', 50],
    ['', '李四', 30],
    ['', '王五', 40],
    ['', '趙六', 60],
    ['平均年齡', '', ]
]
sh.write_row('A1', data[0], fmt1)
sh.write_row('A2', data[1], fmt2)
sh.write_row('A3', data[2], fmt2)
sh.write_row('A4', data[3], fmt2)
sh.write_row('A5', data[4], fmt2)
sh.write_row('A6', data[5], fmt1)
chart = workbook.add_chart({'type': 'line'})
workbook.close()

XlsxWriter 可以很方便的生成圖表。

import xlsxwriter

# 創(chuàng)建工作簿
wk = xlsxwriter.Workbook('test.xlsx')
# 創(chuàng)建表單
sh = wk.add_worksheet('test')
fmt1 = wk.add_format()
fmt2 = wk.add_format()
# 字體加粗
fmt1.set_bold(True)
# 設(shè)置左對(duì)齊
fmt2.set_align('left')
# 數(shù)據(jù)
data = [
    ['', '姓名', '年齡'],
    ['', '張三', 50],
    ['', '李四', 30],
    ['', '王五', 40],
    ['', '趙六', 60],
    ['平均年齡', '', ]
]
sh.write_row('A1', data[0], fmt1)
sh.write_row('A2', data[1], fmt2)
sh.write_row('A3', data[2], fmt2)
sh.write_row('A4', data[3], fmt2)
sh.write_row('A5', data[4], fmt2)
sh.write_row('A6', data[5], fmt1)
'''
area:面積圖
bar:直方圖
column:柱狀圖
line:折線(xiàn)圖
pie:餅圖
doughnut:環(huán)形圖
radar:雷達(dá)圖
'''
chart = wk.add_chart({'type': 'line'})
# 創(chuàng)建圖表
chart.add_series(
    {
        'name':'=test!$B$1',
        'categories':'=test!$B$2:$B$5',
        'values':   '=test!$C$2:$C$5'
    }
)
chart.set_title({'name':'用戶(hù)年齡折線(xiàn)圖'})
chart.set_x_axis({'name':'姓名'})
chart.set_y_axis({'name':'年齡'})
sh.insert_chart('A9', chart)
wk.close()

執(zhí)行結(jié)果:

3. 讀取

我們使用 xlrd 讀取之前寫(xiě)入的數(shù)據(jù),使用 pip install xlrd 命令安裝。

import xlrd

# 打開(kāi)
wb = xlrd.open_workbook('test.xlsx')
print( 'sheet名稱(chēng):', wb.sheet_names())
print( 'sheet數(shù)量:', wb.nsheets)
# 根據(jù) sheet 索引獲取 sheet
sh = wb.sheet_by_index(0)
# 根據(jù) sheet 名稱(chēng)獲取 sheet
# sh = wb.sheet_by_name('test')
print( u'sheet %s 有 %d 行' % (sh.name, sh.nrows))
print( u'sheet %s 有 %d 列' % (sh.name, sh.ncols))
print('第二行內(nèi)容:', sh.row_values(1))
print('第三列內(nèi)容:', sh.col_values(2))
print('第二行第三列的值為:', sh.cell_value(1, 2))
print('第二行第三列值的類(lèi)型為:', type(sh.cell_value(1, 2)))

4. 修改

之前寫(xiě)入的數(shù)據(jù)還有一個(gè)平均年齡是空著的,我們先讀取之前寫(xiě)入的數(shù)據(jù),再計(jì)算出平均值,最后將平均值寫(xiě)入。這里要用到 xlutils 模塊,使用 pip install xlutils 安裝。

import xlrd, xlwt
from xlutils.copy import copy

def avg(list):
    sumv = 0
    for i in range(len(list)):
        sumv += list[i]
    return int(sumv / len(list))
# formatting_info 為 True 表示保留原格式
wb = xlrd.open_workbook('test.xls', formatting_info=True)
# 復(fù)制
wbc = copy(wb)
sh = wb.sheet_by_index(0)
age_list = sh.col_values(2)
age_list = age_list[1:len(age_list)-1]
avg_age = avg(age_list)
sh = wbc.get_sheet(0)
# 設(shè)置左對(duì)齊
alm = xlwt.Alignment()
alm.horz = 0x01
style = xlwt.XFStyle()
style.alignment = alm
sh.write(5, 2, avg_age, style)
wbc.save('test.xls')

執(zhí)行結(jié)果:


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多