前言

越来越多开发者表示,自从用了Python/Pandas,Excel都没有打开过了,用Python来处理与可视化表格就是四个字——非常快速!

下面我来举几个明显的例子

1.删除重复行和空行

我们直接用dict.fromkeys的方法把当前的数据转为字典,默认的值为None因为用不到,也就无所谓了。然后我们再用list直接对结果进行类型转换,转换为list。

In [135]:
for row in rows4:print(row)
('name', 'address')
('tom li', 'beijing')
('tom li', 'beijing')
('',)
('mary wang', 'shandong')
('mary wang', 'shandong')
('',)
('de8ug', 'guangzhou')
In [148]:
dict.fromkeys(rows4)
Out[148]:
{('name', 'address'): None,('tom li', 'beijing'): None,('',): None,('mary wang', 'shandong'): None,('de8ug', 'guangzhou'): None}
In [137]:
list(dict.fromkeys(rows4))
Out[137]:
[('name', 'address'),('tom li', 'beijing'),('',),('mary wang', 'shandong'),('de8ug', 'guangzhou')]
复制代码

这时候,重复数据直接去掉了,注意我们这里的dict是python3新版本的,所以顺序没有影响,如果你还在用python2或者python3.5以下,建议升级一下python版本。

接下来,就是空数据的处理了。观察('',)是个元组,第一个位置的数据为空字符串,那么整体长度为1,可以直接通过循环来去掉。这里的循环我们可以用Python中的语法糖写法,直接一行搞定,最后加个判断只留下长度大于1,最后用list转换为列表。

In [179]:
list(x for x in dict.fromkeys(rows4) if len(x[0])>1)
Out[179]:
[('name', 'address'),('tom li', 'beijing'),('mary wang', 'shandong'),('de8ug', 'guangzhou')]
复制代码

上面的研究搞定了,直接把研究结果放到函数中解决重复行和空行的问题。

注意这时候我们处理的行数据,所以就不再按列循环了。而且,当前的sheet中处理之后,每一行的内容都会修改位置或删除。所以我们先用old_rows = [x for x in sheet.values]取到旧的每一行的数据,注意这里的sheet后直接用values取到数据,而不是cell对象。这里的old_rows是个列表,就可以用刚才的研究直接转为删除重复和空行的数据了。

接下来,用sheet.delete_rows(1, sheet.max_row)
删除所有行,第一个参数表示从第一行开始,第二个参数为最大行数。最后,用循环新的行数据的方式,把新数据写入当前的sheet。

In [189]:
def handle_duplicate(wb, sheetname):"""去除重复行,空行先取出每一行,清空sheet,处理后写回"""print(f'开始处理工作表:{sheetname}'.center(18, '-'))sheet = wb[sheetname]old_rows = [x for x in sheet.values]print('修改前:', old_rows)new_rows = list(x for x in dict.fromkeys(old_rows) if len(x[0])>1)print('修改后-》》', new_rows)# 删除所有行sheet.delete_rows(1, sheet.max_row)# 写入新数据for row in new_rows:sheet.append(row)
复制代码

运行测试,查看结果。再说一次,一定记得测试啊!如果有错误就根据错误提示,查看代码,反复调试,去除bugs。

In [190]:
wb = load_data()
handle_duplicate(wb, '重复行')
save_as(wb)复制代码

2.删除空格

删除空格也需要用到字符串的函数,所以这里还是简单研究一下。如果我们想去除字符串中间的空格,可以用split默认进行分割,然后把分割的结果用’’.join方法连接起来就可以了。注意join前是空的字符串。这里也用不到strip去除两端的空格了,因为split分割后只有几个最后的字符串组成的列表。

In [192]:
a="a b c   "
In [194]:
a.strip()
Out[194]:
'a b c'
In [195]:
a.split()
Out[195]:
['a', 'b', 'c']
In [196]:
''.join(a.split())
Out[196]:
'abc'
In [ ]:
复制代码

研究成功后,写入函数。这次命名为handle_blank。

In [197]:
def handle_blank(wb, sheetname):"""按列循环, 通过参数确认目标"""print(f'开始处理工作表:{sheetname}'.center(18, '-'))sheet = wb[sheetname]for col in sheet.iter_cols():  # 不加参数,循环所有列for cell in col:print('修改前:', cell.value, end='')cell.value = ''.join(cell.value.split())print('修改后-》》',cell.value)
In [198]:
handle_blank(wb, '空格')
复制代码

3.修改日期和时间格式

有时候,我们需要对表格中时间相关的单元格进行格式修改,这里需要用到Python中时间模块datetime,将需要的格式进行拼接后,用strftime进行转换。

假设这里我们想把之前简单的1/11月日格式,更改为年月日的样式,中间加上分隔符/或-,就需要用"%x"或"%Y-%m-%d"来进行操作了。注意这里的%加字母都是官方定义好的格式而已,我们用到时候进行拼接,传给函数就可以了。

具体更多的拼接格式如下:

In [199]:
import datetime
In [209]:
d=datetime.datetime(2019,1,11)
In [203]:
d.strftime("%x")
Out[203]:
'01/11/19'
In [205]:
d.strftime("%Y-%m-%d")
Out[205]:
'2019-01-11'
复制代码

研究完成后,我们编写函数。

首先需要用m, d = cell.value.split('/')把之前简单的日期进行分割,得到m,代表月份和日期,然后用datetime进行转换,生成时间相关的对象day,注意里面的参数是数字,所以用int转换,最后把day进行格式化输出。编写函数后,一定记得测试。

In [218]:
def handle_time(wb, sheetname):"""按列循环, 通过参数确认目标"""print(f'开始处理工作表:{sheetname}'.center(18, '-'))sheet = wb[sheetname]for col in sheet.iter_cols(max_col=1, min_row=2):  # 找到时间的列, 第一列,从第二行开始for cell in col:print('修改前:', cell.value, end='')m, d = cell.value.split('/')day = datetime.datetime(2019, int(m), int(d))cell.value = day.strftime("%Y-%m-%d")print('修改后-》》',cell.value)In [220]:
wb = load_data()
handle_time(wb, '时间')
save_as(wb)
复制代码

4.修复数字和符号

接下来,处理数字和符号相关的操作。加入我们之前的价格,很多是有小数点的,这时候还想保存两位小数,并加上人民币符号为前缀。就需要新的一波研究了。

有小数点,一是要保证位数,我们这里要求2位,二是要对多余的位数四舍五入。可以有以下俩个方式完成,一个用Decimal一个用round,两个的区别是Decimal("0.00")指定位数后,会自动补0,而round遇到0就自动舍掉了。而且round在四舍五入的计算中,还有点特殊。具体可查看官方文档。

我们这里用Decimal来完成函数内相关操作。记得测试啊!

In [227]:
from decimal import Decimal
In [240]:
a = 3.1
b=Decimal(a).quantize(Decimal("0.00"))
print(b)
3.10
In [244]:
round(a,2)  # 位数自动省略0
Out[244]:
3.1In [247]:
def handle_num(wb, sheetname):"""按列循环, 通过参数确认目标"""print(f'开始处理工作表:{sheetname}'.center(18, '-'))sheet = wb[sheetname]for col in sheet.iter_cols(min_col=3, max_col=3, min_row=2):  # 找到时间的列, 第一列,从第二行开始for cell in col:print('修改前:', cell.value, end='')
#             cell.value = round(float(cell.value), 3)cell.value = '¥' + str(Decimal(cell.value).quantize(Decimal("0.00")))print('修改后-》》',cell.value)
In [249]:
wb = load_data()
handle_num(wb, '数字符号')
save_as(wb)
复制代码

最后

文章对你有帮助的话,记得帮作者点点赞
接下来还会持续跟新有关Python的文章,点点关注不迷路。

福利区:

再见了Excel,我有Python了,不用天天加班了相关推荐

  1. python能在excel运行吗-用ExcelPython在Excel中调用Python

    Python部落组织翻译, 禁止转载 [介绍] ExclePython是一款轻量级的COM库,它支持你从Excel VBA中调用Python代码和运行Python 其他功能(确实任何语言都支持COM) ...

  2. [python交互]Excel催化剂与python交互原理剖析,py开发者按此规范可自行扩展功能...

    只需简单地编写小段py脚本,就可以借助Excel催化剂的平台作用,将写出的py脚本,嫁接到Excel的环境上使用,在Excel的广阔用户群体上带来更多的产出价值.也大大增加了将自己的python技能输 ...

  3. python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

    原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定! 最近经常听到周围的人抱怨:"工作忙,在加班--" 不知不觉,当代职场人早就被"996&qu ...

  4. 如何在Excel中调用Python脚本,实现数据自动化处理!

    大家好, 这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作. 说起Excel,那绝对是数据处理领域王者般的存在,尽管已经诞生三十多年了,现在全球 ...

  5. python做表格好用吗_吊打Excel!用Python来办公到底有多强?

    现如今无论是工作汇报.产品设计.后台设计甚至是数据大屏,越来越多的行业都离不开与数据打交道! 做数据图表,谁不会?打开Excel,就可以制作各种模板图表! 但是,你的图表是这样的么? Excel作为数 ...

  6. python处理excel表格教程-python操作excel(内附python教程分享)

    今天学习了下xlwings这个库,目的是为了让计算机自动化操作excel表,当某天需要做一些很繁琐的事情,就可以派上用场啦. 基本对象 网上刮来的图,很好. 大概就是xlwings中可以有多个exce ...

  7. python处理表格数据-60万行的Excel数据,Python轻松处理

    原标题:60万行的Excel数据,Python轻松处理 一个朋友在某运动品牌公司上班,老板给他布置了一个处理客户订单数据的任务.要求是根据订单时间和客户id判断生成四个新的数据: 1.记录该客户是第几 ...

  8. excel调用python编程-如何在excel中调用python脚本

    如何在excel中调用python脚本 发布时间:2020-07-03 14:15:28 来源:亿速云 阅读:155 如何在excel中调用python脚本?针对这个问题,这篇文章详细介绍了相对应的分 ...

  9. python与excel的差别-python数据分析相对于bi和excel的优势是什么?

    通常在大型企业里面销售是一个很庞大的部门,里面有很多不同的职能,工作的细分程度高,有直接对接客户的销售经理,也有为客户经理准备资料的后台,有扩展市场的渠道经理,也有负责营销推广的市场部,而里面不同的工 ...

最新文章

  1. c 语言 多进程,VC++中进程与多进程管理的方法详解
  2. android模拟手指滑动,Android Accessibility 模拟界面滑动
  3. JS中怎样获取当前年以及前后几年并构造成对象数组
  4. Exception in thread “main“ java.lang.IllegalArgumentException: http://www.dmg.org/PMML-4_4(没搞定)
  5. 利用WIX制作安装包(2)
  6. Stm32CubeMx lwip+freeRTOS TCP 服务
  7. 调整Excel的打印线
  8. tsm备份mysql_基于tsm的oracle数据库备份及恢复
  9. bootcamp空间不足_Bootcamp安装WinXP补丁时C盘空间不足怎么办?教程一览
  10. 触摸屏校准之tslib
  11. HTML CSS大学生期末网页大作业 DW个人网页设计 人物介绍 历史人物岳飞介绍
  12. 前台jQuery实现图片轮播
  13. 华为一级产品线介绍(部分)
  14. 注册用户数破亿 平安金管家APP成全球寿险首个过亿应用
  15. 如何进行第一次单片机烧录
  16. 5-2 图书价格汇总
  17. Maya 更改模型枢轴位置 Day1
  18. link rel=”canonical”标签的用法
  19. 基于unity制作的AR视频播放
  20. iptables nat及端口映射(转载)

热门文章

  1. 易生信-扩增子教程02-真菌引物选择
  2. pandas基于dataframe字符串数据列包含(contains)特定字符串来筛选dataframe中的数据行(rows where values contain substring)
  3. pandas使用str函数和startswith函数,筛选dataframe中(start with)以特定前缀开头的数据列(selecting columns begin with certain
  4. R语言可视化包ggplot2绘制平滑曲线、回归线实战:geom_smooth() 函数
  5. R语言CRAN不包含的安装包下载并手动使用RStudio进行安装实战:以下载VRPM包及绘制彩色列线图为例
  6. keras构建前馈神经网络(feedforward neural network)进行回归模型构建和学习
  7. R语言spine作棘状图
  8. 小米android10怎么样,感觉小米10太贵不完美?这些Android旗舰也许就有你的菜!
  9. 机器翻译之Facebook的CNN与Google的Attention
  10. 社会计算研究组研究方向