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就可以打开。

 

posted on 2021-06-29 15:18  BabyGo000  阅读(164)  评论(0)    收藏  举报