最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年03月20日 16:20:20   作者:Python圈子  
這篇文章主要介紹了Python 自由定制表格的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

很多開發(fā)者說自從有了 Python/Pandas,Excel 都不怎么用了,用它來處理與可視化表格非??焖?。

下面我來舉幾個例子。

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

我們直接用dict.fromkeys的方法把當(dāng)前的數(shù)據(jù)轉(zhuǎn)為字典,默認的值為None因為用不到,也就無所謂了。然后我們再用list直接對結(jié)果進行類型轉(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')]

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

接下來,就是空數(shù)據(jù)的處理了。觀察('',)是個元組,第一個位置的數(shù)據(jù)為空字符串,那么整體長度為1,可以直接通過循環(huán)來去掉。這里的循環(huán)我們可以用Python中的語法糖寫法,直接一行搞定,最后加個判斷只留下長度大于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ù)行和空行的問題。

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

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

刪除所有行,第一個參數(shù)表示從第一行開始,第二個參數(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)

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

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

2.刪除空格

刪除空格也需要用到字符串的函數(shù),所以這里還是簡單研究一下。如果我們想去除字符串中間的空格,可以用split默認進行分割,然后把分割的結(jié)果用''.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 [ ]:

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

In [197]:
def handle_blank(wb, sheetname):
  """
  按列循環(huán), 通過參數(shù)確認目標(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.修改日期和時間格式

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

假設(shè)這里我們想把之前簡單的1/11月日格式,更改為年月日的樣式,中間加上分隔符/或-,就需要用"%x"或"%Y-%m-%d"來進行操作了。注意這里的%加字母都是官方定義好的格式而已,我們用到時候進行拼接,傳給函數(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('/')把之前簡單的日期進行分割,得到m,代表月份和日期,然后用datetime進行轉(zhuǎn)換,生成時間相關(guān)的對象day,注意里面的參數(shù)是數(shù)字,所以用int轉(zhuǎn)換,最后把day進行格式化輸出。編寫函數(shù)后,一定記得測試。

In [218]:
def handle_time(wb, sheetname):
  """
  按列循環(huán), 通過參數(shù)確認目標(biāo)
  """
  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.修復(fù)數(shù)字和符號

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

有小數(shù)點,一是要保證位數(shù),我們這里要求2位,二是要對多余的位數(shù)四舍五入??梢杂幸韵聜z個方式完成,一個用Decimal一個用round,兩個的區(qū)別是Decimal("0.00")指定位數(shù)后,會自動補0,而round遇到0就自動舍掉了。而且round在四舍五入的計算中,還有點特殊。具體可查看官方文檔。

我們這里用Decimal來完成函數(shù)內(nèi)相關(guān)操作。記得測試?。?/p>

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ù)自動省略0
Out[244]:
3.1

In [247]:
def handle_num(wb, sheetname):
  """
  按列循環(huán), 通過參數(shù)確認目標(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): # 找到時間的列, 第一列,從第二行開始
    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ù)字符號')
save_as(wb)

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

相關(guān)文章

  • django框架用戶權(quán)限中的session緩存到redis中的方法

    django框架用戶權(quán)限中的session緩存到redis中的方法

    今天小編就為大家分享一篇django框架用戶權(quán)限中的session緩存到redis中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • pycharm中報ModuleNotFoundError:No?module?named?'tensorflow'錯誤解決

    pycharm中報ModuleNotFoundError:No?module?named?'tensor

    這篇文章主要給大家介紹了關(guān)于pycharm中報ModuleNotFoundError:No?module?named?'tensorflow'錯誤的解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Python實現(xiàn)隊列的方法示例小結(jié)【數(shù)組,鏈表】

    Python實現(xiàn)隊列的方法示例小結(jié)【數(shù)組,鏈表】

    這篇文章主要介紹了Python實現(xiàn)隊列的方法,結(jié)合實例形式分析了Python基于數(shù)組和鏈表實現(xiàn)隊列的相關(guān)操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2020-02-02
  • Python運行不顯示DOS窗口的解決方法

    Python運行不顯示DOS窗口的解決方法

    今天小編就為大家分享一篇Python運行不顯示DOS窗口的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Pandas時間序列:重采樣及頻率轉(zhuǎn)換方式

    Pandas時間序列:重采樣及頻率轉(zhuǎn)換方式

    今天小編就為大家分享一篇Pandas時間序列:重采樣及頻率轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python3?中return和yield的區(qū)別

    Python3?中return和yield的區(qū)別

    這篇文章主要介紹了Python3?中return和yield的區(qū)別,return和yield都用來返回值;在一次性地返回所有值場景中return和yield的作用是一樣的,但是具體有什么區(qū)別呢,帶著疑問一起進入下面文章學(xué)習(xí)詳細內(nèi)容吧
    2022-06-06
  • 使用Python實現(xiàn)PDF文本的自動替換或修改功能

    使用Python實現(xiàn)PDF文本的自動替換或修改功能

    在處理PDF文檔時,我們有時會遇到需要更新文檔中文字內(nèi)容的情況,手動打開 PDF 文件,逐一查找并修改文字內(nèi)容是一項繁瑣且容易出錯的工作,這篇文章將介紹如何使用Python實現(xiàn)PDF文本的自動替換,需要的朋友可以參考下
    2025-02-02
  • python中validators庫的使用方法詳解

    python中validators庫的使用方法詳解

    這篇文章主要介紹了python中validators庫的使用方法詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Python讀寫csv文件流程及異常解決

    Python讀寫csv文件流程及異常解決

    這篇文章主要介紹了Python讀寫csv文件流程及異常解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Python搭建監(jiān)控平臺的實現(xiàn)示例

    Python搭建監(jiān)控平臺的實現(xiàn)示例

    本文主要介紹了Python搭建監(jiān)控平臺的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論

洪雅县| 沛县| 通州市| 梁河县| 马边| 时尚| 通州市| 乌兰察布市| 周口市| 东兴市| 阳西县| 安吉县| 阿拉善右旗| 铁力市| 克拉玛依市| 丰台区| 白玉县| 镇平县| 故城县| 赣榆县| 昭苏县| 佛冈县| 嘉兴市| 肃南| 盐城市| 正定县| 陇南市| 互助| 敖汉旗| 都江堰市| 商河县| 青海省| 德清县| 金阳县| 平顺县| 枞阳县| 四川省| 行唐县| 吴江市| 谷城县| 四川省|