轉帖|使用教程|編輯:龔雪|2017-05-08 10:45:02.000|閱讀 277 次
概述:在SQL中常見的操作主要是增、刪、改、查幾個動作,那么pandas能否實現對數據的這幾項操作呢?答案是Of Course!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
我們接著上次分享給大家的,來繼續下面的操作。
有關pandas模塊的學習與應用主要介紹以下8個部分:
1、數據結構簡介:DataFrame和Series
2、數據索引index
3、利用pandas查詢數據
4、利用pandas的DataFrames進行統計分析
5、利用pandas實現SQL操作
6、利用pandas進行缺失值的處理
7、利用pandas實現Excel的數據透視表功能
8、多層索引的使用
我們在中已經介紹到了第四部分的描述性統計分析,我們接著往下講pandas模塊中的其他的知識點。
在SQL中常見的操作主要是增、刪、改、查幾個動作,那么pandas能否實現對數據的這幾項操作呢?答案是Of Course!
1.In [99]: dic = {'Name':['LiuShunxiang','Zhangshan'], 2....: 'Sex':['M','F'],'Age':[27,23], 3....: 'Height':[165.7,167.2],'Weight':[61,63]} 4. 5.In [100]: student2 = pd.DataFrame(dic) 6. 7.In [101]: student2 8.Out[101]: 9.Age Height Name Sex Weight 10.0 27 165.7 LiuShunxiang M 61 11.1 23 167.2 Zhangshan F 63
現在將student2中的數據新增到student中,可以通過concat函數實現:
注意到了嗎?在數據庫中union必須要求兩張表的列順序一致,而這里concat函數可以自動對齊兩個數據框的變量!
新增列的話,其實在pandas中就更簡單了,例如在student2中新增一列學生成績:
對于新增的列沒有賦值,就會出現空NaN的形式。
刪除數據框student2,通過del命令實現,該命令可以刪除Python的所有對象。
刪除指定的行
原數據中的第1,2,4,7行的數據已經被刪除了。
根據布爾索引刪除行數據,其實這個刪除就是保留刪除條件的反面數據,例如刪除所有14歲以下的學生:
刪除指定的列
我們發現,不論是刪除行還是刪除列,都可以通過drop方法實現,只需要設定好刪除的軸即可,即調整drop方法中的axis參數。默認該參數為0,表示刪除行觀測,如果需要刪除列變量,則需設置為1。
如果發現表中的某些數據錯誤了,如何更改原來的值呢?我們試試結合布爾索引和賦值的方法:
例如發現student3中姓名為Liushunxiang的學生身高錯了,應該是173,如何改呢?
這樣就可以把原來的身高修改為現在的170了。
看,關于索引的操作非常靈活、方便吧,就這樣輕松搞定數據的更改。
根據性別分組,計算各組別中學生身高和體重的平均值:
如果不對原始數據作限制的話,聚合函數會自動選擇數值型數據進行聚合計算。如果不想對年齡計算平均值的話,就需要剔除改變量:
groupby還可以使用多個分組變量,例如根本年齡和性別分組,計算身高與體重的平均值:
當然,還可以對每個分組計算多個統計量:
是不是很簡單,只需一句就能完成SQL中的SELECT…FROM…GROUP BY…功能,何樂而不為呢?
排序在日常的統計分析中還是比較常見的操作,我們可以使用order、sort_index和sort_values實現序列和數據框的排序工作:
我們再試試降序排序的設置:
上面兩個結果其實都是按值排序,并且結果中都給出了警告信息,即建議使用sort_values()函數進行按值排序。
在數據框中一般都是按值排序,例如:
多表之間的連接也是非常常見的數據庫操作,連接分內連接和外連接,在數據庫語言中通過join關鍵字實現,pandas我比較建議使用merger函數實現數據的各種連接操作。 如下是構造一張學生的成績表:
現在想把學生表student與學生成績表score做一個關聯,該如何操作呢?
注意,默認情況下,merge函數實現的是兩個表之間的內連接,即返回兩張表中共同部分的數據。可以通過how參數設置連接的方式,left為左連接;right為右連接;outer為外連接。
左連接實現的是保留student表中的所有信息,同時將score表的信息與之配對,能配多少配多少,對于沒有配對上的Name,將會顯示成績為NaN。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn