日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

前言

越來(lái)越多開發(fā)者表示,自從用了Python/ target=_blank class=infotextkey>Python/Pandas,Excel都沒(méi)有打開過(guò)了,用Python來(lái)處理與可視化表格就是四個(gè)字——非常快速!

下面我來(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)行類型轉(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ǔ)法糖寫法,直接一行搞定,最后加個(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ù)表示從第一行開始,第二個(gè)參數(shù)為最大行數(shù)。最后,用循環(huán)新的行數(shù)據(jù)的方式,把新數(shù)據(jù)寫入當(dāng)前的sheet。

In [189]:
def handle_duplicate(wb, sheetname):
    """
    去除重復(fù)行,空行
    先取出每一行,清空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)
    # 寫入新數(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 [ ]:

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

In [197]:
def handle_blank(wb, sheetname):
    """
    按列循環(huán), 通過(guò)參數(shù)確認(rèn)目標(biāo)
    """
    print(f'開始處理工作表:{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 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'

研究完成后,我們編寫函數(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)行格式化輸出。編寫函數(shù)后,一定記得測(cè)試。

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

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

最后

文章對(duì)你有幫助的話,記得幫作者點(diǎn)點(diǎn)贊
接下來(lái)還會(huì)持續(xù)跟新有關(guān)Python的文章,點(diǎn)點(diǎn)關(guān)注不迷路。

分享到:
標(biāo)簽:Python
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定