轉(zhuǎn)帖|使用教程|編輯:龔雪|2017-05-08 10:45:02.000|閱讀 277 次
概述:在SQL中常見的操作主要是增、刪、改、查幾個動作,那么pandas能否實現(xiàn)對數(shù)據(jù)的這幾項操作呢?答案是Of Course!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
我們接著上次分享給大家的,來繼續(xù)下面的操作。
有關(guān)pandas模塊的學(xué)習(xí)與應(yīng)用主要介紹以下8個部分:
1、數(shù)據(jù)結(jié)構(gòu)簡介:DataFrame和Series
2、數(shù)據(jù)索引index
3、利用pandas查詢數(shù)據(jù)
4、利用pandas的DataFrames進(jìn)行統(tǒng)計分析
5、利用pandas實現(xiàn)SQL操作
6、利用pandas進(jìn)行缺失值的處理
7、利用pandas實現(xiàn)Excel的數(shù)據(jù)透視表功能
8、多層索引的使用
我們在中已經(jīng)介紹到了第四部分的描述性統(tǒng)計分析,我們接著往下講pandas模塊中的其他的知識點。
在SQL中常見的操作主要是增、刪、改、查幾個動作,那么pandas能否實現(xiàn)對數(shù)據(jù)的這幾項操作呢?答案是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
現(xiàn)在將student2中的數(shù)據(jù)新增到student中,可以通過concat函數(shù)實現(xiàn):

注意到了嗎?在數(shù)據(jù)庫中union必須要求兩張表的列順序一致,而這里concat函數(shù)可以自動對齊兩個數(shù)據(jù)框的變量!
新增列的話,其實在pandas中就更簡單了,例如在student2中新增一列學(xué)生成績:

對于新增的列沒有賦值,就會出現(xiàn)空NaN的形式。
刪除數(shù)據(jù)框student2,通過del命令實現(xiàn),該命令可以刪除Python的所有對象。

刪除指定的行

原數(shù)據(jù)中的第1,2,4,7行的數(shù)據(jù)已經(jīng)被刪除了。
根據(jù)布爾索引刪除行數(shù)據(jù),其實這個刪除就是保留刪除條件的反面數(shù)據(jù),例如刪除所有14歲以下的學(xué)生:

刪除指定的列

我們發(fā)現(xiàn),不論是刪除行還是刪除列,都可以通過drop方法實現(xiàn),只需要設(shè)定好刪除的軸即可,即調(diào)整drop方法中的axis參數(shù)。默認(rèn)該參數(shù)為0,表示刪除行觀測,如果需要刪除列變量,則需設(shè)置為1。
如果發(fā)現(xiàn)表中的某些數(shù)據(jù)錯誤了,如何更改原來的值呢?我們試試結(jié)合布爾索引和賦值的方法:
例如發(fā)現(xiàn)student3中姓名為Liushunxiang的學(xué)生身高錯了,應(yīng)該是173,如何改呢?

這樣就可以把原來的身高修改為現(xiàn)在的170了。
看,關(guān)于索引的操作非常靈活、方便吧,就這樣輕松搞定數(shù)據(jù)的更改。
根據(jù)性別分組,計算各組別中學(xué)生身高和體重的平均值:

如果不對原始數(shù)據(jù)作限制的話,聚合函數(shù)會自動選擇數(shù)值型數(shù)據(jù)進(jìn)行聚合計算。如果不想對年齡計算平均值的話,就需要剔除改變量:

groupby還可以使用多個分組變量,例如根本年齡和性別分組,計算身高與體重的平均值:

當(dāng)然,還可以對每個分組計算多個統(tǒng)計量:

是不是很簡單,只需一句就能完成SQL中的SELECT…FROM…GROUP BY…功能,何樂而不為呢?
排序在日常的統(tǒng)計分析中還是比較常見的操作,我們可以使用order、sort_index和sort_values實現(xiàn)序列和數(shù)據(jù)框的排序工作:

我們再試試降序排序的設(shè)置:

上面兩個結(jié)果其實都是按值排序,并且結(jié)果中都給出了警告信息,即建議使用sort_values()函數(shù)進(jìn)行按值排序。
在數(shù)據(jù)框中一般都是按值排序,例如:

多表之間的連接也是非常常見的數(shù)據(jù)庫操作,連接分內(nèi)連接和外連接,在數(shù)據(jù)庫語言中通過join關(guān)鍵字實現(xiàn),pandas我比較建議使用merger函數(shù)實現(xiàn)數(shù)據(jù)的各種連接操作。 如下是構(gòu)造一張學(xué)生的成績表:

現(xiàn)在想把學(xué)生表student與學(xué)生成績表score做一個關(guān)聯(lián),該如何操作呢?

注意,默認(rèn)情況下,merge函數(shù)實現(xiàn)的是兩個表之間的內(nèi)連接,即返回兩張表中共同部分的數(shù)據(jù)??梢酝ㄟ^how參數(shù)設(shè)置連接的方式,left為左連接;right為右連接;outer為外連接。

左連接實現(xiàn)的是保留student表中的所有信息,同時將score表的信息與之配對,能配多少配多少,對于沒有配對上的Name,將會顯示成績?yōu)镹aN。

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn