PyWebIO,让 Pandas 原地起飞的神器!
大家好,我是早起。
我想很多人用 Python 就是用 pandas 進行數據分析,并且你大概率每天就用到 pandas 那幾個函數處理結構大致相似的數據。
每天重復寫著同樣的代碼,很辛苦,于是就會有人想到用 Pyinstaller 進行打包,但是打包的痛苦,尤其是各種亂七八糟的報錯只能說試過的都懂。
但你有想過將要打包的功能,做到網頁上去嗎?這樣只要有個公網ip就能隨時隨地、不限設備的去訪問。你可能會想過,但是當你嘗試去實現,發現 Python 開發頁面動不動就是 Django/flask 這樣的大家伙,很容易勸退。
本文我就將基于之前介紹過的 PyWebIO 庫,講一下如何不寫一行前端代碼,僅用一個不到100行的py腳本制作下面的頁面
上傳數據
首先是數據的加載,在 PyWebIO 中實現這個操作非常簡單,只需要一行代碼即可在頁面添加一個上傳文件的部件
file?=?file_upload('請選擇需要加載的數據')當然有上傳就有讀取的操作,雖然后臺已經將數據文件讀取了,但默認不是用 pandas 讀取的很難操作,所以我們可以用下面的代碼將文件名字讀取出來之后,再用 pandas 進行讀取。
df?=?read_file(file['filename'])讀取之后呢,就會進入到下面的頁面,我們繼續講解該其他功能的實現
添加按鈕與事件
有關標題和文字部分的講解見該系列第一篇文章,本文不再贅述。
現在來重點講解一下,如何添加一個按鈕,簡單來說就是如何實現像下圖一樣,點擊按鈕實現對應功能
這就分為兩個操作,添加按鈕和綁定對應按鈕的事件,在 PyWebIO 中,我們可以使用 put_buttons 添加一個按鈕,并使用 onclick 綁定該按鈕對應的事件
put_buttons(['關閉'],?onclick=lambda?_:?close_popup())例如上面代碼就添加了一個關閉的按鈕,點擊就會關閉彈窗,到我們的頁面來,我們有一排按鈕,怎么實現?
答案是用一個 list,然后將每個按鈕對應的事件也用一個list傳給后臺即可
put_buttons(['檢查重復值','刪除重復值','檢查缺失值','刪除缺失值','檢查異常值','刪除異常值'],?onclick=[lambda:?chongfu(df,res_table), lambda:?chongfuchuli(df,res_table), lambda:?other(), lambda:?other(), lambda:?other(), lambda:?other()])按鈕設置好了之后,就是該按鈕對應操作函數的開發了,例如查找重復值,這對于刷了 pandas300題 的同學來說,完全不是問題
df1?=?df[df.國家奧委會.duplicated()?==?True]但是這只是用 pandas 將重復值查找出來了,怎樣讓網頁顯示出來,這又是下一個問題。
顯示數據
在上面,我們搞定了點擊按鈕就將重復值篩選出來,但是如何讓前端展示表格。
在 PyWebIO 中展示表格一般像下面一樣,將數據轉換為多級列表,再用過markdown渲染出來
但是如果再寫一個轉換函數,就略顯麻煩,幸運的是 pandas 可以直接輸出html,所以我們可以將數據先轉化為 html 再嵌入頁面中,就像前端的 iframe 一樣,這部分代碼如下
put_scrollable(res_table,horizon_scroll=True,height=450) res_table.reset(put_html(df1.to_html(border=0)))通過循環這樣的操作,我們給每一個按鈕都添加一個功能函數,函數內寫入 pandas 操作部分與前端顯示部分就能完成第一部分數據處理的操作。
pin - 持續性輸入
下面一個功能是數據篩選,即給定關鍵詞,輸出包含該關鍵詞的行。
看起來很簡單,但這卻是 PyWebIO 中最難的部分,因為 PyWebIO 默認是同步的代碼,也就是如果一個輸入框沒有輸入內容,那么后面的全部代碼都不會展示。
這也是為什么,在第一個頁面,沒有上傳文件,后面的頁面代碼都沒有輸出,顯然如果這里還用同樣的方法是不可以的。
這就用到 pin 方法,可以簡單的按照異步的思路去理解,也就是說我們先創建一個輸入框和一個提交按鈕,再用回調函數進行綁定
put_markdown('##?數據查詢') pin.put_input('res',?label='請在下方輸入框要查詢的關鍵字',?type=TEXT) put_buttons(['提交查詢'],?lambda?_:?chaxun(res_table,df,pin.pin['res']))就像上面一樣,先使用 pin.put_input 創建輸入框,再使用 put_buttons 添加一個按鈕并綁定對應操作,這里看起來代碼不長,但是實際寫代碼時是需要花費一定時間思考的!
到這里,至此我們的頁面主要邏輯就介紹完畢,至于一些細節性的修改例如文字、標題等大家可以自行研究源碼學習!
小結
通過上面的講解,我們可以發現,沒有寫一行前端,就完成了一個簡單的數據查詢與處理頁面的開發,這就是 PyWebIO 魅力所在!
當然弊端也是有的,就是它最大的優點也是它最大的缺點,不寫前端代碼可以不用關注樣式,從而導致頁面過于簡單。所以你應該合理評估自己對頁面樣式的評估來選擇是否使用它!
但不論如何,我都會在后續的文章中,分享如何用 PyWebIO 開發更多的頁面!喜歡這個系列的話可以給本文點贊、留言、在看!
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)推薦閱讀牛逼!Python常用數據類型的基本操作(長文系列第①篇) 牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)牛逼!Python函數和文件操作(長文系列第③篇)牛逼!Python錯誤、異常和模塊(長文系列第④篇)總結
以上是生活随笔為你收集整理的PyWebIO,让 Pandas 原地起飞的神器!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 肝,Python3中RPC实践
- 下一篇: Pycharm SSH 容器中的pyth