亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python3-操作excle(xlrd&xlwt&xlutils和

系統(tǒng) 2028 0

一,前言

入職數(shù)據(jù)分析以后,肯定要涉及到python處理excle,特別是涉及到對(duì)excle的一些重復(fù)操作時(shí),也許能提升一些效率;因此,有必要對(duì)python操作excle進(jìn)行學(xué)習(xí)。

現(xiàn)有操作excle的工具包有很多,例如 xlrd&xlwt&xlutils 以及強(qiáng)大的 pandas ,此外還有別的工具包,但受限于平臺(tái)或者安裝方式,都沒(méi)有以上兩種常用。(其中,pandas不僅是用來(lái)操作excle,而是一整套強(qiáng)大的工具包。)

知乎有一篇文章些不同python包操作excle的對(duì)比,其中有些內(nèi)容不太準(zhǔn)確,需要自己驗(yàn)證。(知乎鏈接:https://zhuanlan.zhihu.com/p/23998083)

下面對(duì)不同模塊對(duì)excle進(jìn)行操作的基本方法進(jìn)行解釋和練習(xí),更高級(jí)復(fù)雜的操作還需要日后繼續(xù)深入學(xué)習(xí)打磨。

二,xlrd,xlwt讀寫(xiě)excle

下面是一個(gè)讀excle的例子:

            
              # -*- coding: utf-8 -*-
"""
Created on Tue Jul 30 17:27:40 2019

@author: chao
"""
import xlrd
import sys
f1 = xlrd.open_workbook(r'C:\Users\chao\Desktop\dataana.xlsx')#打開(kāi)的這個(gè)excel必須存在,否則會(huì)報(bào)錯(cuò)
filename = sys.argv[0] #獲取文件全路徑
print('opening the file:'+str(filename)) 
#獲取所有sheet頁(yè)的名字
print('all sheets:'+str(f1.sheet_names()))
#按名字查找第二張表單
# sheet=wb.sheet_by_name('abc2')#根據(jù)sheet頁(yè)的名字獲取sheet頁(yè)
sheet = f1.sheet_by_index(0)#根據(jù)sheet頁(yè)的索引獲取sheet頁(yè)
#獲取sheet頁(yè)的行數(shù)和列數(shù)
print('num of rows:'+str(sheet.nrows))
print('num of columns:'+str(sheet.ncols))

for rownum in range(sheet.nrows):  #循環(huán)取每行的數(shù)據(jù)

    print(sheet.row_values(rownum))#取每行的數(shù)據(jù)

    #按照索引打印對(duì)應(yīng)單元格內(nèi)容
    #cell_location_value=sheet.cell(0,0).value #獲取指定單元格的值,第一個(gè)值是列,第二個(gè)值是行
    #print(cell_location_value)
            
          

下面是一個(gè)寫(xiě)excle的例子:

            
              # -*- coding: utf-8 -*-
"""
Created on Tue Jul 30 17:37:55 2019

@author: chao
"""
import xlwt
title = ['姓名','年齡','性別','分?jǐn)?shù)']
stus = [['mary',20,'女',89.9],['rmay',21,'女',89.9],['amry',22,'女',89.9],['yram',23,'女',89.9]]
#新建一個(gè)excel對(duì)象
f1 = xlwt.Workbook()
#添加一個(gè)名為sheet1課程表的sheet頁(yè)
sheet = f1.add_sheet('sheet1')
for i in  range(len(title)):#寫(xiě)入表頭
    sheet.write(0,i,title[i])#寫(xiě)入每行,第一個(gè)值是行,第二個(gè)值是列,第三個(gè)是寫(xiě)入的值
for i in range(len(stus)):
    if i !=0:#如果不是表頭的話
        for j in range(4):
            sheet.write(i,j,stus[i][j])#循環(huán)寫(xiě)入每行數(shù)據(jù)
 #保存‘test1.xls’文件
f1.save(r'C:\Users\chao\Desktop\test1.xls')#保存xlsx后,會(huì)顯示文件損壞打不開(kāi)
            
          

xlwt無(wú)法完成對(duì)已有文件的追加或修改,因此需要下面的xlutils對(duì)已有文件進(jìn)行操作。

三,xlutils修改excle

xlutils實(shí)質(zhì)上仍然需要xlrd和xlwt來(lái)完成操作,例子如下:

            
              # -*- coding: utf-8 -*-
"""
Created on Tue Jul 30 17:37:55 2019

@author: chao
"""
#import xlwt
import xlrd
from xlutils.copy import copy
f1 = xlrd.open_workbook(r'C:\Users\chao\Desktop\dataana.xlsx')
# 復(fù)制為新的xlsx
wt_f1 = copy(f1)
# 修改新的xls
wt_sheet = wt_f1.get_sheet(0)
wt_sheet.write(24,1,'追加內(nèi)容')
# 保存修改
wt_f1.save(r'C:\Users\chao\Desktop\dataana_copy.xls')
            
          

四,pandas創(chuàng)建,讀寫(xiě)excle

先嘗試創(chuàng)建一個(gè)空xlsx:

            
              # -*- coding: utf-8 -*-
"""
Created on Tue Jul 30 19:39:51 2019

@author: chao
"""


import pandas as pd
 
 
# 構(gòu)建數(shù)據(jù)
df=pd.DataFrame()#構(gòu)造原始數(shù)據(jù)文件

# 保存文件
df.to_excel(r'C:\Users\chao\Desktop\pandas_test1.xlsx')
            
          

代碼運(yùn)行后能成功保存文件并且可以打開(kāi),說(shuō)明pandas是支持新版本的excle的。

創(chuàng)建指定內(nèi)容的excle文件:

            
              import pandas as pd
df=pd.DataFrame({'ID':[1,2,3],'Name':['XiaoMing','XiaoHong','XiaoLan']})
df=df.set_index('ID') #指定索引為ID
df.to_excel(r'C:\Users\chao\Desktop\pandas_test1.xlsx')

            
          

注意,如果不指定索引,pandas會(huì)在左側(cè)自動(dòng)添加一列索引。

pandas讀取excle:

            
              df=pd.read_excel(r'C:\Users\chao\Desktop\dataana.xlsx',sheet_name='Sheet1')
#sheet_name用來(lái)指定讀取的sheet,省略時(shí)默認(rèn)讀取第一個(gè)sheet
data=df.head()#默認(rèn)讀取前5行的數(shù)據(jù)
print("read lines:\n{0}".format(data))#格式化輸出
#{}效力等同%
            
          

打印出來(lái),會(huì)發(fā)現(xiàn),pandas讀取數(shù)據(jù)時(shí)也會(huì)自動(dòng)加上索引:

Python3-操作excle(xlrd&xlwt&xlutils和pandas)_第1張圖片

讀取指定行列:

            
              # -*- coding: utf-8 -*-
"""
Created on Tue Jul 30 19:39:51 2019

@author: chao
"""
import pandas as pd
df=pd.read_excel(r'C:\Users\chao\Desktop\dataana.xlsx',sheet_name='Sheet1')
data=df.loc[1:3]['Age']
print("read lines:\n{0}".format(data))
            
          

注意,網(wǎng)上關(guān)于pandas很多教程有點(diǎn)老了,新的pandas已經(jīng)棄用了ix,現(xiàn)在用iloc和loc。

修改指定行列并保存:

            
              # -*- coding: utf-8 -*-
"""
Created on Tue Jul 30 19:39:51 2019

@author: chao
"""
import pandas as pd
df=pd.read_excel(r'C:\Users\chao\Desktop\dataana.xlsx',sheet_name='Sheet1')
df.loc[22,'Age']=18.888
df=df.set_index('Name')
print("read lines:\n{0}".format(df))
pd.DataFrame(df).to_excel(r'C:\Users\chao\Desktop\pandas_test1.xlsx', sheet_name='Sheet1')
            
          

保存結(jié)果:

Python3-操作excle(xlrd&xlwt&xlutils和pandas)_第2張圖片

由上述結(jié)果可知,pandas能夠?qū)π掳姹镜膃xcle進(jìn)行支持,而xlrd&xlwt&xlutils并不支持xlsx。而xlrd&xlwt&xlutils在有些博客的實(shí)驗(yàn)里,讀取速度比pandas更快,而后續(xù)需要對(duì)數(shù)據(jù)進(jìn)行分析的話,還是采用pandas是比較好的。

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99热这里只有精品首页精品 | 国产精品福利影院 | 亚洲图片综合 | 日本强日本不卡一 | 欧美综合国产精品日韩一 | 日本不卡免费 | 国产臀控福利视频在线 | 免费一看一级毛片 | 国产亚洲欧美日韩在线看片 | 成人欧美日韩 | 奇米影视中文字幕 | 干一干操一操 | 国农村精品国产自线拍 | 四虎永久免费网站免费观看 | 女人zzzooooxxxx | 久青草免费在线视频 | 日本不卡高清 | 夜夜干天天操 | 亚洲国产成人91精品 | 日日躁夜夜躁狠狠天天 | videos欧美黑白爆交 | 国产精品夜夜春夜夜爽久久 | 欧美三级久久 | 久久天天躁狠狠躁夜夜爽蜜月 | 欧美aⅴ片 | 亚洲精品一区二区三区婷婷月 | xxx中国毛茸茸 | 欧美 亚洲 中文字幕 | www.色黄 | 亚洲精品9999久久久久 | 精品 日韩 国产 欧美在线观看 | 日韩精品一区二区三区乱码 | 黄色影院在线看 | 国产精品亚洲欧美一级久久精品 | 欧日韩美香蕉在线观看 | 全部费免一级毛片不收费 | 国产一级二级在线观看 | 欧美日本在线视频 | 国产真实偷人视频在线播放 | 夜夜cao| 国产区91 |