Python-----Excel
Python将爬取的数据导入Excel的过程
这是同学们常常会遇到的问题,将手头上的一些数据,便捷的生成Excel表格,方便存储、调用、作图等等
方法一
通过利用pandas中的方法将字典列表中的数据存储于Excel中
使用二维列表时常常用到方法一
引入库,使用库中的DataFrame
import pandas as pd
data = pd.DataFrame(data = , columns = )
pandas官网: https://pandas.pydata.org/pandas-docs/stable/index.html
操作方法
创建DataFrame
用字典创建
>>> data1 = {'学号':['001','002','003'],'姓名':['甲','乙','丙'],
'平时成绩':[82,72,50],'笔试成绩':[78,71,32],'上机成绩':[78,71,32]}
>>> pd.DataFrame(data1)
学号 姓名 平时成绩 笔试成绩 上机成绩
0 001 甲 82 78 78
1 002 乙 72 71 71
2 003 丙 50 32 32
# 使用columns
>>> pd.DataFrame(data1, columns=('姓名','学号','上机成绩','平时成绩','笔试成绩'))
姓名 学号 上机成绩 平时成绩 笔试成绩
0 甲 001 78 82 78
1 乙 002 71 72 71
2 丙 003 32 50 32
# 使用index
>>> pd.DataFrame(data1, index=('No1','No2','No3'))
学号 姓名 平时成绩 笔试成绩 上机成绩
No1 001 甲 82 78 78
No2 002 乙 72 71 71
No3 003 丙 50 32 32
# 加一列
>>> data = pd.DataFrame(data1)
>>> data['总成绩'] = data['平时成绩']*0.4+data['笔试成绩']*0.3+data['上机成绩']*0.3
>>> data
学号 姓名 平时成绩 笔试成绩 上机成绩 总成绩
0 001 甲 82 78 78 79.6
1 002 乙 72 71 71 71.4
2 003 丙 50 32 32 39.2
用列表创建
>>> data2 = [['001','甲',82, 78, 78],['002','乙',72,71,71],['003','丙',50,32,32]]
>>> pd.DataFrame(data2, columns=('学号','姓名','平时成绩','笔试成绩','上机成绩'))
学号 姓名 平时成绩 笔试成绩 上机成绩
0 001 甲 82 78 78
1 002 乙 72 71 71
2 003 丙 50 32 32
切片和索引
- loc,即location,根据行/列名索引
- iloc,这个i可以理解成integer,根据行/列号索引
行
只能用loc/iloc
>>> data1 = {'学号':['001','002','003'],'姓名':['甲','乙','丙'],
'平时成绩':[82,72,50],'笔试成绩':[78,71,32],'上机成绩':[78,71,32]}
>>> data = pd.DataFrame(data1)
>>> data.index = ["C1","C2","C3"]
>>> data.loc["C2":"C3"]
学号 姓名 平时成绩 笔试成绩 上机成绩
C2 002 乙 72 71 71
C3 003 丙 50 32 32
---------------------------------------
>>> data.loc[["C1","C3"]]
学号 姓名 平时成绩 笔试成绩 上机成绩
C1 001 甲 82 78 78
C3 003 丙 50 32 32
---------------------------------------
>>> data.iloc[0:2]
学号 姓名 平时成绩 笔试成绩 上机成绩
C1 001 甲 82 78 78
C2 002 乙 72 71 71
# 根据值查找行索引
>>>data.[data['姓名']=='甲'].index
C1
列
可以直接根据列名。或者使用loc/iloc
>>> data['name']
C1 甲
C2 乙
C3 丙
----------------------------------
>>> data.loc[:,["姓名","笔试成绩"]]
姓名 笔试成绩
C1 甲 78
C2 乙 71
C3 丙 32
----------------------------------
>>> data.iloc[:,0]
C1 001
C2 002
C3 003
Excel读取与写入
读取
read_excel()参数:
- name: excel文件名.xlsx
- sheet_name: 设置读取的 sheet 名
df = pd.read_excel("weather.xlsx",sheet_name="sheet1")
写入
to_excel()参数:
- sheet_name: 设置sheet名
- index:设置sheet序号,默认0
df.to_excel(sheet_name='sheet1',startcol=0,index=False)
方法二
采用Workbook类,直接对Excel进行操作
引入Workbook
from openpyxl import Workbook
创建工作簿和工作表
# 创建工作簿
book = Workbook()
# 创建工作表
sheet = book.create_sheet()
其中create_sheet()参数:
- title:设置工作表的名字
- index:选中第几个工作表(从0开始)
向工作表中添加数据和保存数据
其实可以把工作表当做我们的列表来使用
所以有以下用法
# 向工作表中添加数据
sheet.append(['职位名','公司名','工作地点','薪资','发布时间'])
for item in data:
row = [item['title'],item['company'],item['addr'],item['salary'],item['pubDate']]
sheet.append(row)
# 输出保存
book.save('51job.xlsx')
总结
分别对比一下二者的特点适用场景:
DataFrame | Workbook |
---|---|
适用于二维数据,可以生成二维列表 | 适用于需要直接对Excel表格进行操作 |
整理好数据在列表/字典中可以直接导入生成,一步到位 | 可以直接把Workbook对象作为Excel操作,更多细微的操作 |
大家可以根据需要选择自己的方法,学会将数据通过Python导入Excel中是很有必要的一个技能,以后爬虫或者接单是很有帮助的。后续可以学习将数据上传数据库,有许多爬虫需求是需要做成Excel或者Csv给商家的,因为这种形式可以很好的方便整理数据和画图,直接使用Excel中的功能对数据应用,这样不会代码的人也能操作。
今天的分享就到这里啦,希望大家觉得有用的可以点个小小的赞。