(7)Python初入坑之pandas基礎實操六
本節講解數據的轉換,重複數據的處理,字元串操作以及數據的離散化。
先來回顧一下stack和unstack。stack是把列索引變換到行索引的內層去,unstack會把行索引變換到列索引的內層去,形成層次化索引。
一、移除重複數據
先來設定一個具有重複數據的DataFrame。
可以使用duplicated() 函數來查看哪些數據有重複,並返回布爾值。一個重複數據第一次出現還不是重複數據,第二次出現就是重複數據了。
使用drop_duplicates() 就可以刪除重複的值,只保留不重複的值了。
其中k1和k2都有重複項,上述是默認根據k2數值列,來進行篩選操作,留下了1,2,3。如果我要根據指定的列來進行重複數據篩選,例如k1,我要篩選出不重複的one和two,則需要指定k1。
數據的替換,可以使用replace()函數,把指定的值換成其他值。例如我想把所有為2的值,換成空值NaN。
我們也可以把很多數據替換。例如我要把2和3都替換成NaN值。
二、字元串的操作
如果我要對一個字元串進行操作,例如替換等,如何操作呢?
先創建一個dataframe。
好的,跟著教程創建了一個無敵長的dataframe,反正就是北京各個地方房子出租出售的信息。
要把k2這一列的beijing替換成shanghai,可以使用apply或者map函數,apply可以用於對dataframe所有元素或者某一個Series的函數應用,map只能對Series應用函數。
輸入代碼,報錯了。因為k2中有一個NaN值。因為NaN也在k2列之中,replace無法對空值進行操作。這個時候我們要k2選取,精確到k2的字元串的選取,避開空值,怎麼操作呢?加上str,再直接用str的函數replace即可。
如果要查看某列是否包含一個字元串,同樣可以用str的方法。
變化為大寫,使用upper()
把連在一起的字元串分割開來,例如設定用逗號分割開來,使用split() 進行操作。
三、數據離散化
離散化可以簡單理解為數據的分組或者分布。方便分析。
首先定義一個整型分布的dataframe。並選取head() 默認顯示前5行
數據的範圍是1到50,這個時候我們想研究數據的分布情況,可以給數據分組,來進行劃分。比如我們劃分成這麼幾個組。0-10,10-20,20-30,30-40,40-50。可以用bins= 來設定分組,然後再使用pd.cut() ,來實現分組。這次我們以k1列為分組的列。
可以看出,最後輸出的結果,是體現了k1這一列的20行,即20個數據,每一個數據都在哪一個分組裡面。
可以看出,分組默認的括弧是左開右閉,比如(30,40],那如果我們要實現左閉右開呢?使用right=False即可。如下:
現在我們已經知道了k1列的每一個數據在哪個分組內,現在我們可以進行count計數,來看分組的情況。使用value_counts() 即可。
(畫柱狀圖的樣子初步顯現了嘻嘻,好想畫圖啊啊啊,慢慢學~)
可以看到上述的bins是我們設置好了的,那我們能不能讓數據自己均等的分組呢?直接設置分組的個數即可,數據自己就會自動分組了。例如k1,我們分成4個組。
數據就自動分成4組了,下面也體現了4個分組的具體情況。
上面是k1這一列數據,根據最小到最大的值,自動劃分成了4個均值的分組。
那麼k1列有20行,即20個數據,那如果就根據k1的數據個數劃分成為4組,即5個一組,5個一組,怎麼操作呢?這樣的分組肯定就不是均值分組了~使用pd.qcut() 函數。
這一節的內容結束~
(剛剛創建dataframe的時候報錯,返回int object is not callable,研究大半天都沒明白,最後發現是擼代碼的時候少打了個逗號。。。頭髮都抓掉一大把,看來還是要嚴謹)
推薦閱讀:
※泰坦尼克號數據分析報告
※泰坦尼克號存活率實踐筆記-排名3626
※數據分析、數據挖掘和機器學習共享
※數據分析社群第二關作業——遲遲未交出的作業
※Stitch Fix:當數據遇到時尚