电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python 自由定制表格的實(shí)現(xiàn)示例

瀏覽:7日期:2022-08-01 17:17:31

很多開(kāi)發(fā)者說(shuō)自從有了 Python/Pandas,Excel 都不怎么用了,用它來(lái)處理與可視化表格非常快速。

下面我來(lái)舉幾個(gè)例子。

1. 刪除重復(fù)行和空行

我們直接用dict.fromkeys的方法把當(dāng)前的數(shù)據(jù)轉(zhuǎn)為字典,默認(rèn)的值為None因?yàn)橛貌坏剑簿蜔o(wú)所謂了。然后我們?cè)儆胠ist直接對(duì)結(jié)果進(jìn)行類(lèi)型轉(zhuǎn)換,轉(zhuǎn)換為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’)]

這時(shí)候,重復(fù)數(shù)據(jù)直接去掉了,注意我們這里的dict是python3新版本的,所以順序沒(méi)有影響,如果你還在用python2或者python3.5以下,建議升級(jí)一下python版本。

接下來(lái),就是空數(shù)據(jù)的處理了。觀察(’’,)是個(gè)元組,第一個(gè)位置的數(shù)據(jù)為空字符串,那么整體長(zhǎng)度為1,可以直接通過(guò)循環(huán)來(lái)去掉。這里的循環(huán)我們可以用Python中的語(yǔ)法糖寫(xiě)法,直接一行搞定,最后加個(gè)判斷只留下長(zhǎng)度大于1,最后用list轉(zhuǎn)換為列表。

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’)]

上面的研究搞定了,直接把研究結(jié)果放到函數(shù)中解決重復(fù)行和空行的問(wèn)題。

注意這時(shí)候我們處理的行數(shù)據(jù),所以就不再按列循環(huán)了。而且,當(dāng)前的sheet中處理之后,每一行的內(nèi)容都會(huì)修改位置或刪除。所以我們先用old_rows = [x for x in sheet.values]取到舊的每一行的數(shù)據(jù),注意這里的sheet后直接用values取到數(shù)據(jù),而不是cell對(duì)象。這里的old_rows是個(gè)列表,就可以用剛才的研究直接轉(zhuǎn)為刪除重復(fù)和空行的數(shù)據(jù)了。

接下來(lái),用sheet.delete_rows(1, sheet.max_row)

刪除所有行,第一個(gè)參數(shù)表示從第一行開(kāi)始,第二個(gè)參數(shù)為最大行數(shù)。最后,用循環(huán)新的行數(shù)據(jù)的方式,把新數(shù)據(jù)寫(xiě)入當(dāng)前的sheet。

In [189]:def handle_duplicate(wb, sheetname): ''' 去除重復(fù)行,空行 先取出每一行,清空sheet,處理后寫(xiě)回 ''' print(f’開(kāi)始處理工作表:{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) # 寫(xiě)入新數(shù)據(jù) for row in new_rows: sheet.append(row)

運(yùn)行測(cè)試,查看結(jié)果。再說(shuō)一次,一定記得測(cè)試啊!如果有錯(cuò)誤就根據(jù)錯(cuò)誤提示,查看代碼,反復(fù)調(diào)試,去除bugs。

In [190]:wb = load_data()handle_duplicate(wb, ’重復(fù)行’)save_as(wb)

2.刪除空格

刪除空格也需要用到字符串的函數(shù),所以這里還是簡(jiǎn)單研究一下。如果我們想去除字符串中間的空格,可以用split默認(rèn)進(jìn)行分割,然后把分割的結(jié)果用’’.join方法連接起來(lái)就可以了。注意join前是空的字符串。這里也用不到strip去除兩端的空格了,因?yàn)閟plit分割后只有幾個(gè)最后的字符串組成的列表。

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 [ ]:

研究成功后,寫(xiě)入函數(shù)。這次命名為handle_blank。

In [197]:def handle_blank(wb, sheetname): ''' 按列循環(huán), 通過(guò)參數(shù)確認(rèn)目標(biāo) ''' print(f’開(kāi)始處理工作表:{sheetname}’.center(18, ’-’)) sheet = wb[sheetname] for col in sheet.iter_cols(): # 不加參數(shù),循環(huán)所有列 for cell in col: print(’修改前:’, cell.value, end=’’) cell.value = ’’.join(cell.value.split()) print(’修改后-》》’,cell.value)In [198]:handle_blank(wb, ’空格’)

3.修改日期和時(shí)間格式

有時(shí)候,我們需要對(duì)表格中時(shí)間相關(guān)的單元格進(jìn)行格式修改,這里需要用到Python中時(shí)間模塊datetime,將需要的格式進(jìn)行拼接后,用strftime進(jìn)行轉(zhuǎn)換。

假設(shè)這里我們想把之前簡(jiǎn)單的1/11月日格式,更改為年月日的樣式,中間加上分隔符/或-,就需要用'%x'或'%Y-%m-%d'來(lái)進(jìn)行操作了。注意這里的%加字母都是官方定義好的格式而已,我們用到時(shí)候進(jìn)行拼接,傳給函數(shù)就可以了。

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

In [199]:import datetimeIn [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’

研究完成后,我們編寫(xiě)函數(shù)。

首先需要用m, d = cell.value.split(’/’)把之前簡(jiǎn)單的日期進(jìn)行分割,得到m,代表月份和日期,然后用datetime進(jìn)行轉(zhuǎn)換,生成時(shí)間相關(guān)的對(duì)象day,注意里面的參數(shù)是數(shù)字,所以用int轉(zhuǎn)換,最后把day進(jìn)行格式化輸出。編寫(xiě)函數(shù)后,一定記得測(cè)試。

In [218]:def handle_time(wb, sheetname): ''' 按列循環(huán), 通過(guò)參數(shù)確認(rèn)目標(biāo) ''' print(f’開(kāi)始處理工作表:{sheetname}’.center(18, ’-’)) sheet = wb[sheetname] for col in sheet.iter_cols(max_col=1, min_row=2): # 找到時(shí)間的列, 第一列,從第二行開(kāi)始 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, ’時(shí)間’)save_as(wb)

4.修復(fù)數(shù)字和符號(hào)

接下來(lái),處理數(shù)字和符號(hào)相關(guān)的操作。加入我們之前的價(jià)格,很多是有小數(shù)點(diǎn)的,這時(shí)候還想保存兩位小數(shù),并加上人民幣符號(hào)為前綴。就需要新的一波研究了。

有小數(shù)點(diǎn),一是要保證位數(shù),我們這里要求2位,二是要對(duì)多余的位數(shù)四舍五入。可以有以下倆個(gè)方式完成,一個(gè)用Decimal一個(gè)用round,兩個(gè)的區(qū)別是Decimal('0.00')指定位數(shù)后,會(huì)自動(dòng)補(bǔ)0,而round遇到0就自動(dòng)舍掉了。而且round在四舍五入的計(jì)算中,還有點(diǎn)特殊。具體可查看官方文檔。

我們這里用Decimal來(lái)完成函數(shù)內(nèi)相關(guān)操作。記得測(cè)試啊!

In [227]:from decimal import DecimalIn [240]:a = 3.1b=Decimal(a).quantize(Decimal('0.00'))print(b)3.10In [244]:round(a,2) # 位數(shù)自動(dòng)省略0Out[244]:3.1In [247]:def handle_num(wb, sheetname): ''' 按列循環(huán), 通過(guò)參數(shù)確認(rèn)目標(biāo) ''' print(f’開(kāi)始處理工作表:{sheetname}’.center(18, ’-’)) sheet = wb[sheetname] for col in sheet.iter_cols(min_col=3, max_col=3, min_row=2): # 找到時(shí)間的列, 第一列,從第二行開(kāi)始 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, ’數(shù)字符號(hào)’)save_as(wb)

到此這篇關(guān)于Python 自由定制表格的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python 自由定制表格內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 江西自考网 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 广东泵阀展|阀门展-广东国际泵管阀展览会 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 环球电气之家-中国专业电气电子产品行业服务网站! | 纳米涂料品牌 防雾抗污纳米陶瓷涂料厂家_虹瓷科技 | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 山西3A认证|太原AAA信用认证|投标AAA信用证书-山西AAA企业信用评级网 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 货车视频监控,油管家,货车油管家-淄博世纪锐行电子科技 | 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 恒温恒湿试验箱_高低温试验箱_恒温恒湿箱-东莞市高天试验设备有限公司 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 |