python 把4个二进制组成float_4个方法用Python自由定制Excel表格
很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速。
下面我来举几个例子。
删除重复行和空行
我们直接用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)
删除空格
删除空格也需要用到字符串的函数,所以这里还是简单研究一下。如果我们想去除字符串中间的空格,可以用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, '空格')
修改日期和时间格式
有时候,我们需要对表格中时间相关的单元格进行格式修改,这里需要用到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)
修复数字和符号
接下来,处理数字和符号相关的操作。加入我们之前的价格,很多是有小数点的,这时候还想保存两位小数,并加上人民币符号为前缀。就需要新的一波研究了。
有小数点,一是要保证位数,我们这里要求2位,二是要对多余的位数四舍五入。可以有以下俩个方式完成,一个用Decimal一个用round,两个的区别是Decimal("0.00")指定位数后,会自动补0,而round遇到0就自动舍掉了。而且round在四舍五入的计算中,还有点特殊。具体可查看官方文档。
我们这里用Decimal来完成函数内相关操作。记得测试啊!
In [227]:from decimal import DecimalIn [240]:a = 3.1b=Decimal(a).quantize(Decimal("0.00"))print(b)3.10In [244]:round(a,2) # 位数自动省略0Out[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)
- END -
原文链接:
51CTO博客https://blog.51cto.com/51ctoblog/2438164
文源网络,仅供学习之用,如有侵权,联系删除。
往期精彩
◆ 50款开源工具你都用过吗?
◆ python+C、C++混合编程的应用
◆ python网络爬虫的基本原理详解
◆ Python自动操控excel,一小时解决你一天的工作
◆ 如何用Python增强Excel,减少处理复杂数据的痛苦?
python 把4个二进制组成float_4个方法用Python自由定制Excel表格相关推荐
- python 结果写入excel_python中如何将测试结果写入到原有的excel表格(二)
今天周五了哦,每个月最开心的就是周五还有发工资那天,呵呵.在这里提前祝大家周末愉快. 上次分享了如何结合python+excel表实现单接口自动化,今天和大家说下,如何将测试结果自动写入到原有的exc ...
- python爬虫数据导入excel_Python爬虫练习(3)——将数据导入excel表格
通过python爬虫抓取下来的数据要怎么存储呢,当然,把数据存储在txt文本中是一个不错的主意,但是,有事为了更加清晰的分析数据,可以将之存储在excel表格中,我之前是先将数据存储在txt文本中,然 ...
- python单元测试mock_单元测试-具有多次调用方法的Python Mock对象
我有一个正在测试的类,该类具有依赖关系的另一个类(该类的实例被传递给CUT的init方法). 我想使用Python Mock库来模拟此类. 我所拥有的是这样的: mockobj = Mock(spec ...
- python数组和列表的区别_JS数组方法与python列表方法的比较
JS的数组(Array)与python的列表(List)很相似,本人因为之前学过JS,后来学习python感觉有些方法很容易混淆,这里对常用的一些方法做些区分 增 删 改 查 排序 逆序 增加元素 1 ...
- python音频合成_音频拼接的简单实现方法(python一种,java两种)
音频拼接,就是5s+5s=10s的这种拼接. 需要修改的地方都是有三处,在代码里标注好了. 一.Python实现: Python3 #!/usr/bin/env python # -*- coding ...
- python实现二分查找算法_两种方法实现Python二分查找算法
一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number: print(" ...
- Python练习猜拳,利用while循环自定义函数,结果数据存入excel表格
题目: 设计一个猜拳小游戏,系统出一个石头.剪刀或布:用户输入一个石头.剪刀或布:1代表石头,2代表剪刀,3代表布,或输入shitou.石头等均可识别. 游戏玩到用户赢了系统为止,并将结果输入到指定位 ...
- python中将npz类型的数据读取出来 并将其存储在excel表格
1 导包 import xlwings as xw import pandas as pd import numpy as np 2 以国民经济核算季度数据.npz为例子 先上图存储为excel成功后 ...
- Python大数据分析与挖掘实战微课版答案 Python大数据分析与挖掘实战课后答案 例题 课后作业 python题目 python题库 数据分析与挖掘题库 数据分析与挖掘项目
(在此仅展示题目,所有数据.代码.答案.习题等点我头像,在资源中!!!) 以下关于pandas 数据预处理说法正确的是(). A. pandas没有做哑变量的函数 B. 在不导入其他厍的情况下,仅仅使 ...
- python查看数据类型的方法_pycharm下查看python的变量类型和变量内容的方法
pycharm下查看python的变量类型和变量内容的方法 用过Matlab的同学基本都知道,程序里面的变量内容可以很方便的查看到,但python确没这么方便,对于做数据处理的很不方便,其实不是没有这 ...
最新文章
- vasp算表面吸附流程_VASP实例分析表面吸附计算
- 理解JSON.stringify()高级用法
- STM32 基础系列教程 14 - IIC
- golang Println、Printf、Sprintf的区别
- 状态模式(Strategy Pattern)
- Linux性能分析工具汇总
- 基本概念学习(8006)--南桥芯片
- 74HC138 三八译码器
- 谷歌这是要全面退出中国!
- matlab fft函数画幅度谱,如何在FFT幅度谱上绘制掩模线
- mysql主键和候选键有什么区别?
- DFD图练习(图书管理系统)
- 无线网密码修改好了无法连接服务器,无线路由器修改密码后电脑无法上网如何解决...
- 计算机词汇店名,有创意的店名大全
- 成都android培训成都java培训成都3g培训学习资料
- JavaScript 基础学习(三)
- 一款用autoit3写的小游戏,大家娱乐下
- 我想哭,可是欲哭无泪
- linux串口设备配置方法(固定ID)
- 盈透创始人 Thomas Peterffy
热门文章
- 【翻译】Siesta事件记录器入门
- PetShop 4.0学习笔记:消息队列MSMQ
- redis LRU和LFU
- (Maven配置)Failed to read artifact descriptor for xxx:jar解决方法
- 一个ExtJs的最基本的mvc模式示例
- C 风格字符串,C++string类,MFC,CString类的区别。
- Eclipse安装插件支持jQuery智能提示
- 推荐几个.NET开源图表组件
- c语言 实验6 数组实验报告,实验报告(实验六数组).doc
- Linux O(n)调度器