本文是【統(tǒng)計師的Python日記】第5天的日記 回顧一下: 第1天學(xué)習(xí)了Python的基本頁面、操作,,以及幾種主要的容器類型,; 第2天學(xué)習(xí)了python的函數(shù)、循環(huán)和條件,、類,。 第3天了解了Numpy這個工具庫。 第4天初步了解了Pandas這個庫 原文復(fù)習(xí)(點擊查看): 今天將帶來第5天的學(xué)習(xí)日記,。 目錄如下: 前言 一,、描述性統(tǒng)計 1. 加總 2. 描述性統(tǒng)計 3. 相關(guān)系數(shù) 二、缺失值處理 1. 丟棄缺失值 2. 填充缺失值 三,、層次化索引 1. 用層次索引選取子集 2. 自定義變量名 3. 變量名與索引互換 4. 數(shù)據(jù)透視表 四,、數(shù)據(jù)導(dǎo)入導(dǎo)出 1. 數(shù)據(jù)導(dǎo)入 2. 數(shù)據(jù)導(dǎo)出 統(tǒng)計師的Python日記【第5天:Pandas,露兩手】 前言 根據(jù)我的Python學(xué)習(xí)計劃:
上一集開始學(xué)習(xí)了Pandas的數(shù)據(jù)結(jié)構(gòu)(Series和DataFrame),,以及DataFrame一些基本操作:改變索引名、增加一列,、刪除一列,、排序。 今天我將繼續(xù)學(xué)習(xí)Pandas,。 一,、描述性統(tǒng)計 想拿一個簡單的數(shù)據(jù)試試手,翻到了一份我國2012-2015年季度GDP的數(shù)據(jù),,如下表(單位:萬億),, 想整理到DataFrame中,如何處理,? 用DataFrame:
得到了一張非常清爽的DataFrame數(shù)據(jù)表,。 現(xiàn)在我要對這張表進行簡單的描述性統(tǒng)計: 1. 加總 .sum()是將數(shù)據(jù)縱向加總(每一列加總) 這就很奇怪了,2012,、2013,、2014、2015四個年份的第一季度加總,,這是什么鬼,?其實我更想看橫向加總,就是每一年四個季度加總,,得到一年的總和,,原來,指定axis=1即可: 特別注意的是缺失值的情況,! 如果有缺失值,,比如四個數(shù)值2,3,1,NaN,那么加總的結(jié)果是2+3+1+NaN=6,,也就是缺失值自動排除掉了,!這點特別注意,因為這可能會導(dǎo)致你的數(shù)據(jù)不必苛,,比如某一年少一個季度的值,,那么這一年其實就是三個季度的加總,,跟其他年份四個季度怎么比? 因為剛?cè)胄械臅r候在excel上犯過這類錯誤,,所以在此記錄一下,。 解決辦法是指定 skipna=False,有缺失值將不可加總:
這是一組有缺失值的數(shù)據(jù),,現(xiàn)在來加總: 還可以累積加總: 關(guān)于缺失值,,在后面還要專門學(xué)習(xí)(二、缺失值),。 2. 描述性統(tǒng)計 pandas除了加總,,還可以利用 .describe() 得到每列的各種描述性分析: 當(dāng)然,除了用 .describe() 還可以自己用函數(shù)來得到,,比如: 一些函數(shù)記錄在此(參考書本《利用Python進行數(shù)據(jù)分析》):
3. 相關(guān)系數(shù) 利用 .corr() 可以計算相關(guān)系數(shù),比如計算四個季度的相關(guān)系數(shù): 計算年份的相關(guān)系數(shù)呢,?轉(zhuǎn)置一下就可以了: 然而可惜的是——沒有P值,! 也可以單獨只計算兩列的系數(shù),比如計算S1與S3的相關(guān)系數(shù): 二,、缺失值處理 Pandas和Numpy采用NaN來表示缺失數(shù)據(jù),, 1. 丟棄缺失值 兩種方法可以丟棄缺失值,比如第四天的日記中使用的的城市人口數(shù)據(jù): 將帶有缺失的行丟棄掉: 這個邏輯是:“一行中只要有一個格缺失,,這行就要丟棄,。” 那如果想要一行中全部缺失才丟棄,,應(yīng)該怎么辦,?傳入 how=’all‘ 即可,。 Chu那行被丟棄掉了,。 另一種丟棄缺失值的方法是 data[data.notnull()] ,但是只能處理 數(shù)值型 數(shù)據(jù),。 2. 填充缺失值 用 .fillna() 方法對缺失值進行填充,,比如將缺失值全部變?yōu)?: 還可以指定填充方法: method=
舉個例子: 后面baoding的pop被填充進來了。 三,、層次化索引 我們前面的索引就是Chu,、Bao、Ha,、Hu......,,單一層次索引,如果索引為亞洲-中國-各個省-各個市,,變量為人口,,這就是典型的層次化索引。
這個例子中索引有兩層,,國家和年份,,來學(xué)習(xí)一些簡單的操作。 1. 用層次索引選取子集: 選取多個子集呢,? 2. 自定義變量名 自定義變量名的好處很多,,可以更方便的對數(shù)據(jù)進行選擇。使用 columns= 自定義變量名: 索引的名字也可以當(dāng)變量一樣命名,,分別命名country和year兩個索引名: 用 .swaplevel() 可以調(diào)換兩個索引contry和year的位置: 3. 將索引與變量互換 使用 .reset_index([]) 可以將索引變成列變量,。 使用 .set_index([]),也可以講變量變成索引: 4. 數(shù)據(jù)透視表 大家都用過excel的數(shù)據(jù)透視表,,把行標(biāo)簽和列標(biāo)簽隨意的布局,,pandas也可以這么實施,使用 .unstack() 即可: 四,、數(shù)據(jù)的導(dǎo)入導(dǎo)出 1. 數(shù)據(jù)導(dǎo)入 表格型數(shù)據(jù)可以直接讀取為DataFrame,,比如用 read_csv 直接讀取csv文件: 有文件testSet.csv: 存在D盤下面,現(xiàn)在讀?。?/p> 發(fā)現(xiàn)了一個問題——第一行被當(dāng)做變量名了,!所以要指定 header=None: 變量名變成了0、1,,還是變扭啊,,我們來指定個變量吧: 用 names= 可以指定變量名。 看到var1那列,,如果想用這列做索引,,咋辦?好辦,! 用 index_col= 即可指定索引,。 除了read_csv,還有幾種讀取方式:
read_table可以讀取txt的文件,,說到這里,想到一個問題——如果txt文件的分隔符很奇怪怎么辦,? 比如—— 這個testSet.txt文件用“l(fā)oves”做分隔符,! 隱隱覺得有人向我表白,但是有點惡心...... 在實際中,,更可能是某種亂碼,,解決這種特殊分隔符,用 sep= 即可,。 忽略紅色背景的部分,。 還有一種情況是開頭帶有注釋的: 使用 skiprows= 就可以指定要跳過的行: 從我多年統(tǒng)計師從業(yè)經(jīng)驗來看,學(xué)會了如何跳過行,,也要學(xué)如何讀取某些行,,使用 nrows=n 可以指定要讀取的前n行,以數(shù)據(jù) 為例: 2. 數(shù)據(jù)導(dǎo)出 導(dǎo)出csv文件使用 data.to_csv 命令: data.to_csv(outFile, index=True, encoding='gb2312') index=True 指定輸出索引,,當(dāng)數(shù)據(jù)中有中文的時候用 encoding= 來解碼,,否則會出現(xiàn)亂碼,一般 gb2312 即可,,有些例外的情況用 gb18030 基本都能解決,。 無私的把日記給大家分享,覺得我?guī)浺操澮幌掳?,越多人覺得我?guī)?,我就越想公開越多的日記給大家看。 因為我?guī)洶 1. 關(guān)于數(shù)據(jù)分析的提問或求助直接在微信后臺留言,。 2. 轉(zhuǎn)載,、投稿、免費發(fā)布招聘,、合作,,請加數(shù)說君個人微信AnselT,或Email:[email protected],。 數(shù)說工作室 數(shù)據(jù)分析師之家 | 金融 生物 零售 互聯(lián)網(wǎng) 微信ID:shushuojun 長按二維碼關(guān)注數(shù)說工作室 |
|
來自: kieojk > 《數(shù)據(jù)挖掘》