<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PyWebIO,讓 Pandas 原地起飛的神器!

          共 2671字,需瀏覽 6分鐘

           ·

          2021-11-19 17:22

          我想很多人用 Python 就是用 pandas 進(jìn)行數(shù)據(jù)分析,并且你大概率每天就用到 pandas 那幾個函數(shù)處理結(jié)構(gòu)大致相似的數(shù)據(jù)。

          每天重復(fù)寫著同樣的代碼,很辛苦,于是就會有人想到用 Pyinstaller 進(jìn)行打包,但是打包的痛苦,尤其是各種亂七八糟的報錯只能說試過的都懂。

          但你有想過將要打包的功能,做到網(wǎng)頁上去嗎?這樣只要有個公網(wǎng)ip就能隨時隨地、不限設(shè)備的去訪問。你可能會想過,但是當(dāng)你嘗試去實(shí)現(xiàn),發(fā)現(xiàn) Python 開發(fā)頁面動不動就是 Django/flask 這樣的大家伙,很容易勸退。

          本文我就將基于之前介紹過的 PyWebIO 庫,講一下如何不寫一行前端代碼,僅用一個不到100行的py腳本制作下面的頁面

          上傳數(shù)據(jù)

          首先是數(shù)據(jù)的加載,在 PyWebIO 中實(shí)現(xiàn)這個操作非常簡單,只需要一行代碼即可在頁面添加一個上傳文件的部件

          file?=?file_upload('請選擇需要加載的數(shù)據(jù)')

          當(dāng)然有上傳就有讀取的操作,雖然后臺已經(jīng)將數(shù)據(jù)文件讀取了,但默認(rèn)不是用 pandas 讀取的很難操作,所以我們可以用下面的代碼將文件名字讀取出來之后,再用 pandas 進(jìn)行讀取。

          df?=?read_file(file['filename'])

          讀取之后呢,就會進(jìn)入到下面的頁面,我們繼續(xù)講解該其他功能的實(shí)現(xiàn)

          添加按鈕與事件

          有關(guān)標(biāo)題和文字部分的講解見該系列第一篇文章,本文不再贅述。

          現(xiàn)在來重點(diǎn)講解一下,如何添加一個按鈕,簡單來說就是如何實(shí)現(xiàn)像下圖一樣,點(diǎn)擊按鈕實(shí)現(xiàn)對應(yīng)功能

          這就分為兩個操作,添加按鈕和綁定對應(yīng)按鈕的事件,在 PyWebIO 中,我們可以使用 put_buttons 添加一個按鈕,并使用 onclick 綁定該按鈕對應(yīng)的事件

          put_buttons(['關(guān)閉'],?onclick=lambda?_:?close_popup())

          例如上面代碼就添加了一個關(guān)閉的按鈕,點(diǎn)擊就會關(guān)閉彈窗,到我們的頁面來,我們有一排按鈕,怎么實(shí)現(xiàn)?

          答案是用一個 list,然后將每個按鈕對應(yīng)的事件也用一個list傳給后臺即可

          put_buttons(['檢查重復(fù)值','刪除重復(fù)值','檢查缺失值','刪除缺失值','檢查異常值','刪除異常值'],?onclick=[lambda:?chongfu(df,res_table),
          lambda:?chongfuchuli(
          ????????????df,
          ????????????res_table),
          lambda:?other(),
          lambda:?other(),
          lambda:?other(),
          lambda:?other()])

          按鈕設(shè)置好了之后,就是該按鈕對應(yīng)操作函數(shù)的開發(fā)了,例如查找重復(fù)值,這對于刷了 pandas300題 的同學(xué)來說,完全不是問題

          df1?=?df[df.國家奧委會.duplicated()?==?True]

          但是這只是用 pandas 將重復(fù)值查找出來了,怎樣讓網(wǎng)頁顯示出來,這又是下一個問題。

          顯示數(shù)據(jù)

          在上面,我們搞定了點(diǎn)擊按鈕就將重復(fù)值篩選出來,但是如何讓前端展示表格。

          PyWebIO 中展示表格一般像下面一樣,將數(shù)據(jù)轉(zhuǎn)換為多級列表,再用過markdown渲染出來

          但是如果再寫一個轉(zhuǎn)換函數(shù),就略顯麻煩,幸運(yùn)的是 pandas 可以直接輸出html,所以我們可以將數(shù)據(jù)先轉(zhuǎn)化為 html 再嵌入頁面中,就像前端的 iframe 一樣,這部分代碼如下

          put_scrollable(res_table,horizon_scroll=True,height=450)
          res_table.reset(put_html(df1.to_html(border=0)))

          通過循環(huán)這樣的操作,我們給每一個按鈕都添加一個功能函數(shù),函數(shù)內(nèi)寫入 pandas 操作部分與前端顯示部分就能完成第一部分?jǐn)?shù)據(jù)處理的操作。

          pin - 持續(xù)性輸入

          下面一個功能是數(shù)據(jù)篩選,即給定關(guān)鍵詞,輸出包含該關(guān)鍵詞的行。

          看起來很簡單,但這卻是 PyWebIO 中最難的部分,因?yàn)?PyWebIO 默認(rèn)是同步的代碼,也就是如果一個輸入框沒有輸入內(nèi)容,那么后面的全部代碼都不會展示。

          這也是為什么,在第一個頁面,沒有上傳文件,后面的頁面代碼都沒有輸出,顯然如果這里還用同樣的方法是不可以的。

          這就用到 pin 方法,可以簡單的按照異步的思路去理解,也就是說我們先創(chuàng)建一個輸入框和一個提交按鈕,再用回調(diào)函數(shù)進(jìn)行綁定

          put_markdown('##?數(shù)據(jù)查詢')
          pin.put_input('res',?label='請?jiān)谙路捷斎肟蛞樵兊年P(guān)鍵字',?type=TEXT)
          put_buttons(['提交查詢'],?lambda?_:?chaxun(res_table,df,pin.pin['res']))

          就像上面一樣,先使用 pin.put_input 創(chuàng)建輸入框,再使用 put_buttons 添加一個按鈕并綁定對應(yīng)操作,這里看起來代碼不長,但是實(shí)際寫代碼時是需要花費(fèi)一定時間思考的!

          到這里,至此我們的頁面主要邏輯就介紹完畢,至于一些細(xì)節(jié)性的修改例如文字、標(biāo)題等大家可以自行研究源碼學(xué)習(xí)!

          小結(jié)

          通過上面的講解,我們可以發(fā)現(xiàn),沒有寫一行前端,就完成了一個簡單的數(shù)據(jù)查詢與處理頁面的開發(fā),這就是 PyWebIO 魅力所在!

          當(dāng)然弊端也是有的,就是它最大的優(yōu)點(diǎn)也是它最大的缺點(diǎn),不寫前端代碼可以不用關(guān)注樣式,從而導(dǎo)致頁面過于簡單。所以你應(yīng)該合理評估自己對頁面樣式的評估來選擇是否使用它!

          但不論如何,我都會在后續(xù)的文章中,分享如何用 PyWebIO 開發(fā)更多的頁面!喜歡這個系列的話可以給本文點(diǎn)贊、留言、在看!

          注:本文的完整代碼,可以在后臺回復(fù) 1105 獲取!

          學(xué)習(xí)資料領(lǐng)取


          小熊妹給大家整理了很多數(shù)據(jù)類的學(xué)習(xí)資料,歡迎領(lǐng)取哦,我打賭你會看的
          點(diǎn)擊下面名片關(guān)注公眾號【碼工小熊】,在會話欄回復(fù)關(guān)鍵字即可領(lǐng)取!
          1、回復(fù)【SQL】領(lǐng)取Mysql基礎(chǔ)查詢手冊。
          2、回復(fù)【python合集】領(lǐng)取十份python學(xué)習(xí)資料。


          想和陳老師、小熊妹一起討論問題?歡迎加入接地氣的陳老師的知識星球哦!經(jīng)過接1年時間的積累,星球已經(jīng)有150+主題分享,可以更好地解答問題、交流經(jīng)驗(yàn)、沉淀知識掃下面二維碼即可加入,等你來哦~

          瀏覽 64
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费精品久久久久久中文字幕-无删减 | 韩国三级黄片视频 | 天堂网亚洲 | 国产一级二级在线观看 | 久久久久久久久久久久久不卡了 |