本篇針對Python語言的數據分析庫(pandas),分享了5個可以提升數據處理效率的解決方案,總結來說就是,不用不知道,一用真高效!符合真香定律···
涉及到數據的清洗,那麼nan值必然是一個需要處理的問題,不論是直接捨棄還是填充值,總是需要先定位nan值在哪裡,再根據數據特點去做相應的操作。這裡我分享下我個人對定位nan值問題一些好的實踐
詳看以下代碼,主要包含三種情況的定位
import pandas as pdimport numpy as npdf = pd.DataFrame({&34;: [i for i in list(&34;)], &34;: [i for i in range(10, 15)], &34;: [&34;, np.nan, &34;, np.nan, &34;]}) 結果展示 :顯示只有female列有nan值存在name Falseage Falsefemale Truedtype: bool
第二個方法:df[&34;].isnull()
結果如下,返回的是每個值是否為nan值的布爾值
第一個方法已經確定了哪些列有nan值,那麼接下來你可能想知道的是這些欄位中哪些值是nan值,那麼這個方法就可以幫你定位
0 False1 True2 False3 True4 FalseName: female, dtype: bool
第三個方法:df[df.isnull().values==True]
結果如下:返回的是數據表中含有nan值的所有行
還有個寫法很推薦, df[df.列名.isnull().values==True],因為有些列的nan值沒有什麼實際作用,也不用處理,那麼有些列則必須不能有nan值,那麼就可以通過這個命令專門針對某一列進行nan值的定位
這個命令是我用的最多的,因為在大數據文件中,如果nan值非常少,那麼這種方法的定位非常有有效率且直接
構建案例數據import pandas as pddf = pd.DataFrame({&34;: [&34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;], &34;: [&34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;]}) 我們發現需求簡單來說 就是將小明和小紅的愛好匯總到一起 name 愛好0 小明 籃球,足球,桌球,唱歌,跳舞,跳繩1 小紅 喝酒,抽菸,燙頭,蹦迪,瑜伽
想要實現這個效果,代碼如下
34;name&34;愛好&34;,&34;isin&34;省&34;遼寧&34;遼寧&34;遼寧&34;四川&34;四川&34;四川&34;四川&34;山東&34;山東&34;市&34;瀋陽&34;大連&34;盤錦&34;成都&34;資陽&34;綿陽&34;樂山&34;青島&34;菏澤& 數據呈現如下 省 市0 遼寧 瀋陽1 遼寧 大連2 遼寧 盤錦3 四川 成都4 四川 資陽5 四川 綿陽6 四川 樂山7 山東 青島8 山東 菏澤
需求描述為:要呈現除了瀋陽之外的數據
34;瀋陽& 結果呈現如下 省 市1 遼寧 大連2 遼寧 盤錦3 四川 成都4 四川 資陽5 四川 綿陽6 四川 樂山7 山東 青島8 山東 菏澤
有時候我們會面對這種需求:一個欄位中保存的是帶有固定分隔符的字符串(比如&34;),需要將這一行的這個欄位拆分,拆分為一個數據集,這個數據集每一行都顯示這個原有欄位的一個值
這麼說有點繞口,看圖
34;name&34;小明&34;小紅&34;小陳&34;小白&34;小王&34;技能&34;籃球,排球,羽毛球&34;桌球,籃球,排球&34;網球,唱歌,跳舞&34;b-box,籃球,足球&34;網球,桌球,羽毛球& 構造數據如下所示 name 技能0 小明 籃球,排球,羽毛球1 小紅 桌球,籃球,排球2 小陳 網球,唱歌,跳舞 3 小白 b-box,籃球,足球4 小王 網球,桌球,羽毛球
需求為:需要把技能相同的人匯總一起,那麼首先第一步肯定是要將每個人技能拆開,再去做聚合操作,那麼拆開的結果應該是如下圖所示的
用到了拼接和轉置的操作df=df.drop(&39;, axis=1).join(df[&39;].str.split(&39;, expand=True).stack().reset_index(level=1, drop=True).rename(&39;))
需求描述:我想將數據根據一定的要求分類並排序,然後取每個分組後排序的前兩條記錄
舉例來說就是,如下
import numpy as npimport pandas as pddf = pd.DataFrame({&34;: [&34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;, &34;], &34;: [&34;, &34;, &34;, &34;, &34;, &34;,&34;, &34;, &34;]})34;籃球場個數& 數據如下所示 省 市 籃球場個數0 遼寧 瀋陽 46977371 遼寧 大連 35509602 遼寧 盤錦 31546603 四川 成都 11748384 四川 資陽 44091975 四川 綿陽 21882126 四川 樂山 16097227 山東 青島 37247358 山東 菏澤 2102416
需求為:展示每個省籃球場個數最多的前兩個市,展示如下
先排名,根據省市和籃球場個數,要加上inplace=True, 不然沒有更改原表的順序df.sort_values(by=[&34;, &34;], ascending=False, inplace=True)print(df)34;省"]).head(2)