Python3使用xlrd、xlwt处理Excel方法数据


Posted in Python onFebruary 28, 2020

说在前头

最近在做毕设,题目是道路拥堵预测系统,学长建议我使用SVM算法进行预测,但是在此之前需要把Excel中的数据进行二次处理,原始数据不满足我的需要,可是。。有346469条数据,不能每一条都自己进行运算并且将它进行归一化运算!!

Python3使用xlrd、xlwt处理Excel方法数据

作为一个Java开发者,Python的使用我是从来没用过的啊,也是作死选了个这么难的题目。。后来在网上查阅发现xlrd可以通过Python代码读取Excel的文件,他的含义是xls文件的read(只读),另外它的同类是xlwt(xls的write喽~),这个是可以执行写入操作的库。那我们就开始:

Python3使用xlrd、xlwt处理Excel方法数据

作为一名新手,Python的dalao千万别喷,我们抱着学习的心态一起来学习这两个库到底怎么使用吧!

一、xlrd的使用

篇幅太多,这篇只介绍xlrd的使用,xlwt下篇继续哦~
想使用肯定先安装,windows系统下如果你安装了Python环境,直接打开cmd键入:$ pip install xlrdxlwt 也是这样安装,说实话Python这些个类库真的是太方便了(题外话)

我们比如要修改这个Excel的数据:

Python3使用xlrd、xlwt处理Excel方法数据

总共有两层:

Python3使用xlrd、xlwt处理Excel方法数据

导入xlrd

import xlrd

读取数据文件

workbook = xlrd.open_workbook(r'E:\test.xlsx')

打印Sheet信息

print(workbook.sheet_names())

打印结果:

Python3使用xlrd、xlwt处理Excel方法数据

根据下标获取表单

print(workbook.sheet_names()[1])

后面加个中括号,里面是表单的位置,我输入1,表示第二页,所以打印:

Python3使用xlrd、xlwt处理Excel方法数据

根据索引或名称获取数据的名称、行或列

index = workbook.sheet_by_index(0)# 根据索引或者行数列数和名称
print('索引名称:'+str(index.name)+' 索引的行数'+
   str(index.nrows)+' 索引的列数'+str(index.ncols))

输出结果:

Python3使用xlrd、xlwt处理Excel方法数据

Python3使用xlrd、xlwt处理Excel方法数据

确实是七行五列,没毛病~

Python3使用xlrd、xlwt处理Excel方法数据

同样根据表单的名称也能拿到Sheet对象

index2 = workbook.sheet_by_name('Sheet1')
print('索引名称:'+str(index2.name)+' 索引的行数'+
   str(index2.nrows)+' 索引的列数'+str(index2.ncols))

输出结果:

Python3使用xlrd、xlwt处理Excel方法数据

获取整行整列的内容

最重要的来了,怎么获取一整行、一整列的内容呢?
首先要拿到表单的对象,通过上面说的两种方法:
我习惯用名称获取:

sheet1= workbook.sheet_by_name('Sheet1')

获取了以后:

row_values = sheet1.row_values(2)
print('第三行的内容:'+str(row_values))
col_values = sheet1.col_values(2)
print('第三列的内容'+str(col_values))

我们看看输出结果:

Python3使用xlrd、xlwt处理Excel方法数据

至于时间为什么是43812.0,这个是天数,可以转换成日期格式,后边我会详细写用法~

Python3使用xlrd、xlwt处理Excel方法数据

百分百没毛病的!~

获取具体几行几列的内容

这个方法有很多,都可以用,看个人习惯,我列举六种:

print(sheet1.cell_value(1, 1))
print(sheet1.cell(1, 1))
print(sheet1.row(1)[1])
print(sheet1.col(1)[1])
print(sheet1.row_values(1)[1])
print(sheet1.col_values(1)[1])

想知道某行某列的类型是什么怎么做呢?

print(sheet1.cell(1, 0).ctype)
print(sheet1.cell(1, 2).ctype)
print(sheet1.cell(1, 3).ctype)

输出结果为:

1
2
3

ctype 分别: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

tip: 打印的时候需要注意:

python跟java在类型转换上有很大的不同,这点我更喜欢Java的处理方式(打印的时候通通转换成String类型),比如我想打印很多类型的属性,同时打印没问题,但是Python必须要限定类型为str,否则就会报错

public class test {
  public static void main(String[] args) {
    int num = 1;
    String ss = "sss";
    System.out.println("Integer"+num+"String"+ss);
  }
}

java完全可以正常运行~
Python:

a = 1
b = 'ss'
print('int:'+a+'str'+ b)

拼接的时候必须限定a和b为str类型,否则报错!
报错内容:

Python3使用xlrd、xlwt处理Excel方法数据

如何修改date类型为float类型的数字

想修改时间格式的属性:

as_tuple = xlrd.xldate_as_tuple(sheet1.cell_value(1, 3), workbook.datemode)

cell_value(1,3) 表示我要获取 2019/11/13

Python3使用xlrd、xlwt处理Excel方法数据

第二个参数datemode就不解释了,需要改哪个文件,就调用哪个文件对象的datemode
我们输出一下as_tuple这个对象:

Python3使用xlrd、xlwt处理Excel方法数据

看到这个元组里的数据也可以看出来,前三个分别就是年月日了,所以我们要提取这三个数字:

d = date(*as_tuple[:3])

date()这个方法需要三个参数,分别是年月日,所以我们提取元组的前三个数字正好可以:
我们打印一下:

Python3使用xlrd、xlwt处理Excel方法数据

这个不就是我们需要的格式吗?
等等,我是用斜杠“/”隔开的,这个怎么是“-”,我们改一下格式,通过strftime(string formate time)方法:

strftime = d.strftime('%Y/%m/%d')

打印一下:

Python3使用xlrd、xlwt处理Excel方法数据

这样就完美了~

怎么获取合并单元格

我们转到sheet2

Python3使用xlrd、xlwt处理Excel方法数据

可以看到第六行的2-5列都是合并单元格,内容是无,第七行和第八行的第二列是合并单元格,内容是无,第七行和第八行的第四和第五列是合并单元格,内容是啥都没有。

我们需要用到方法:merged_cells

sheet2 = workbook.sheet_by_name('Sheet2')
print(sheet2.merged_cells)

输出结果:

[(5, 6, 1, 5), (6, 8, 1, 2), (6, 8, 3, 5)]

这个5615,6812,6835啥意思?
四个参数分别为行、行最大(不超过最大行)、列、列最大(不超过最大列)
拿5615举例子,第五行到第六行的左闭右开区间[5,6),这就是第五行,[1,5)表示第一列到第四列,我们看:

Python3使用xlrd、xlwt处理Excel方法数据

由于python是从零开始,所以python的第五行,实际上是Excel的第六行,第1-4列就 是 2-5列,这不就是无吗?这只是告诉你哪些是合并单元格,想打印怎么办?

print(sheet2.cell_value(5, 1))
print(sheet2.cell_value(6, 1))
print(sheet2.cell_value(6, 3))

只去第一个和第三个参数就可以打印出来啦

Python3使用xlrd、xlwt处理Excel方法数据

看到这里说明你真的很努力~看懂为主哦!感谢点赞,有错误请指正,有问题留言告诉我!Bye Bye

Python3使用xlrd、xlwt处理Excel方法数据

到此这篇关于Python3使用xlrd、xlwt处理Excel方法数据的文章就介绍到这了,更多相关Python3使用xlrd、xlwt处理Excel内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python装饰器的函数式编程详解
Feb 27 Python
Python实现比较两个列表(list)范围
Jun 12 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
对python添加模块路径的三种方法总结
Oct 16 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
详解python 中in 的 用法
Dec 12 Python
详解python内置模块urllib
Sep 09 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 Python
Python进程Multiprocessing模块原理解析
Feb 28 #Python
python 实现多维数组(array)排序
Feb 28 #Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 #Python
Python使用Socket实现简单聊天程序
Feb 28 #Python
在python3中使用shuffle函数要注意的地方
Feb 28 #Python
Python对称的二叉树多种思路实现方法
Feb 28 #Python
pycharm如何实现跨目录调用文件
Feb 28 #Python
You might like
PHP入门
2006/10/09 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
JavaScript显式数据类型转换详解
2019/03/18 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python调用命令行进度条的方法
2015/05/05 Python
python批量提取word内信息
2015/08/09 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
matplotlib绘制动画代码示例
2018/01/02 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
转党组织关系介绍信
2014/01/08 职场文书