1. 程式人生 > 其它 >Python_資料分析_讀寫excel(1)

Python_資料分析_讀寫excel(1)

接觸到爬蟲之後,會發現資料量越來越大,在進行格式化資料清洗階段就會出現很多的問題,因此用程式來進行資料清洗確實能節省很多的時間。處理excel檔案分為讀和寫。分別用到xlrd和xlwt庫。

1. 讀檔案

讀Excel表主要用到xlrd,這個庫用起來十分方便,可以直接將excel看做二位陣列。

需要注意的是,在處理excel時,經常遇到excel單元格內出現多餘的空格與Tab鍵,這種單元格處理起來不易發現,建議使用strip()函式進行處理,這樣處理起來的效果比較理想。

   import xlrd


def read_excel():
# 開啟檔案
work_url = r'C:\Users\lenovo\Desktop\10.內科_過敏反應科.xlsx'
workbook = xlrd.open_workbook(work_url)

# 獲取所有sheet
print(workbook.sheet_names()) # [u'sheet1', u'sheet2']

# 根據sheet索引或者名稱獲取sheet內容
sheet1 = workbook.sheet_by_index(0) # 通過元組索引順序獲取
# sheet1 = workbook.sheet()[0] # 通過列表索引順序獲取
# sheet1 = workbook.sheet_by_name(u'sheet1') # 通過名稱獲取

# sheet的名稱,行數,列數
print(sheet1.name, sheet1.nrows, sheet1.ncols)

# 獲取整行和整列的值(陣列)
rows = sheet1.row_values(3) # 獲取第四行內容
cols = sheet1.col_values(2) # 獲取第三列內容
print(rows)
print(cols)

# 獲取單元格內容
print(sheet1.cell(1, 0).value)

if __name__ == '__main__':
read_excel()

2.寫檔案

前面介紹讀excel相當於只讀形式,能夠從excel中提取出相應的內容但不能寫入。寫excel檔案則需要使用xlwt庫來進行。

   import xlwt

workbook = xlwt.Workbook(encoding = 'ascii') # 例項化一個Workbook
worksheet = workbook.add_sheet('My Worksheet') # 建立一個工作薄
worksheet.write(0, 0, label = '1') # 填充資料
workbook.save('Excel_Workbook.xls') # 儲存資料

上面的程式碼可以完成簡單的excel的寫操作,當需要進行更為複雜的操作時,也可以用xlwt來進行書寫,比如合併單元格、設定表格樣式等。下面給出一個更復雜的例子,如果需要進行復雜操作可以在使用時查閱庫介紹。

   import xlwt


#設定表格樣式
def set_style(name,height,bold=False):
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = name
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
return style


#寫Excel
def write_excel():
f = xlwt.Workbook()
sheet1 = f.add_sheet('學生',cell_overwrite_ok=True)
row0 = ["姓名","年齡","出生日期","愛好"]
colum0 = ["張三","李四","戀習Python","小明","小紅","無名"]
#寫第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
#寫第一列
for i in range(0,len(colum0)):
sheet1.write(i+1,0,colum0[i],set_style('Times New Roman',220,True))


sheet1.write(1,3,'2006/12/12')
sheet1.write_merge(6,6,1,3,'未知')#合併行單元格
sheet1.write_merge(1,2,3,3,'打遊戲')#合併列單元格
sheet1.write_merge(4,5,3,3,'打籃球')


f.save('test.xls')


if __name__ == '__main__':
write_excel()

可以得到以下結果:

3.向已有檔案中進行寫操作–一個具體例項

前面介紹了讀操作和寫操作,可以發現寫操作時新建立excel表格進行寫操作,那麼如何像一個已有的檔案中進行寫操作。我們用一個例項來進行學習。

由於前面介紹了SnowNLP庫( https://blog.csdn.net/weixin_44585839/article/details/90444593 ),因此相對商品評論進行情感分析,我使用爬蟲對京東上的某商品下評論進行爬取,一共爬取350條評論,儲存“京東商品評論”的excel中,區域性截圖如下:

在這裡我希望從excel的第四列中(不包括第一行),取出評論並使用snownlp()函式進行分析,得到相關的情感係數並寫入excel中。相關程式碼如下。

   from xlrd import open_workbook
from xlwt import easyxf
from xlutils.copy import copy
import os
from snownlp import SnowNLP

url = r"C:\Users\lenovo\Desktop\Python\完整程式碼區\京東評論情感分析\京東商品評論.xlsx"


def nlp(work_url):
read_workbook = open_workbook(work_url)
write_workbook = copy(read_workbook)

sheet_read = read_workbook.sheet_by_index(0)
sheet_write = write_workbook.get_sheet(0)
sheet_write.write(0, 4, "sentiment")

line = sheet_read.nrows
for i in range(1, line):
txt = sheet_read.cell(i,3).value
sentiment = SnowNLP(txt)
sheet_write.write(i, 4, sentiment.sentiments)

os.remove(work_url)
write_workbook.save(work_url)


if __name__ == '__main__':
nlp(url)

經過執行,得到excel檔案的效果為: 針對上述程式碼進行總結

  • 該程式碼實現向已有檔案中進行寫操作時使用copy函式,將讀操作的excel複製到寫操作中,並用os將原始檔刪除,儲存新的寫操作中的檔案

  • 通過建立迴圈可以快速進行操作

  • 在程式執行結束後,開啟excel檔案發現檔案損毀。經過查閱(理解的不一定對),我使用的ms office為2016版本,檔案拓展名為xlsx,而xlwt進行寫操作後保留的excel檔案為低版本檔案,這裡將檔案的拓展名改為xls就可以開啟。