[python][科學(xué)計算][pandas]簡要使用教程4-查詢與關(guān)聯(lián)

最后一次更新日期: 2019/3/21

pandas是基于numpy的數(shù)據(jù)分析庫署照,提供一些更易用的數(shù)據(jù)模型和大量高效的統(tǒng)計方法。

使用前先導(dǎo)入模塊:
import pandas as pd
按需導(dǎo)入以下模塊:
import numpy as np
import matplotlib.pyplot as plt

1. 索引查找

(1). 索引器格式

單值選取:[value,...]
多值選取:[[value1,value2],...]
范圍選取:[start:end:step,...]

start表示區(qū)間的開始剂陡,默認(rèn)值0狈涮,end表示區(qū)間的結(jié)束(不包含),默認(rèn)值等于軸長度鸭栖,step表示選取的步長薯嗤,默認(rèn)值1,采用默認(rèn)值的參數(shù)可以省略纤泵,[:,...]表示對應(yīng)軸方向上全部選取。

pandas中索引器的格式與numpy差不多镜粤,但用法有區(qū)別捏题。pandas除了numpy的位置索引,還增加了標(biāo)簽索引肉渴,雖然可以對SeriesDataFrame直接使用索引器公荧,但用法被嚴(yán)格限制,建議改用ilocloc方法進(jìn)行索引同规。

(2). 直接索引
In [157]: df=pd.DataFrame(np.arange(1,10).reshape((3,3)),columns=['col1','col2','col3'],index=['row1','row2','row3'])

In [158]: df[0:3:2]
Out[158]: 
      col1  col2  col3
row1     1     2     3
row3     7     8     9

In [161]: df['row1':'row3':2]
Out[161]: 
      col1  col2  col3
row1     1     2     3
row3     7     8     9

In [162]: df['col2']
Out[162]: 
row1    2
row2    5
row3    8
Name: col2, dtype: int32

In [163]: df[['col1','col3']]
Out[163]: 
      col1  col3
row1     1     3
row2     4     6
row3     7     9

In [168]: df['col2'][1:3]
Out[168]: 
row2    5
row3    8
Name: col2, dtype: int32

直接索引提供了有限的幾種使用方式:按行位置進(jìn)行索引切片循狰、按行標(biāo)簽進(jìn)行索引切片、按列標(biāo)簽取列券勺、按列標(biāo)簽列表取多列绪钥、布爾索引篩選行、索爾索引篩選元素等关炼。
一次索引器只能使用一種方式程腹,不能行列同時操作,如有需要儒拂,可進(jìn)行連續(xù)索引寸潦。

(3). loc和iloc索引
In [169]: df.loc['row1','col1']
Out[169]: 1

In [170]: df.loc['row1':'row3':2,'col1':'col3':2]
Out[170]: 
      col1  col3
row1     1     3
row3     7     9

In [185]: df.iloc[0,0]
Out[185]: 1

In [186]: df.iloc[0:3:2,0:3:2]
Out[186]: 
      col1  col3
row1     1     3
row3     7     9

loc專用于標(biāo)簽索引,iloc專用于位置索引社痛,索引器可接收單值见转、列表、范圍蒜哀、布爾索引斩箫,可同時索引行和列。

(4). 布爾索引
In [190]: df>5
Out[190]: 
       col1   col2   col3
row1  False  False  False
row2  False  False   True
row3   True   True   True

In [191]: df[df>5]
Out[191]: 
      col1  col2  col3
row1   NaN   NaN   NaN
row2   NaN   NaN   6.0
row3   7.0   8.0   9.0

In [192]: df['col1']>2
Out[192]: 
row1    False
row2     True
row3     True
Name: col1, dtype: bool

In [193]: df.loc[df['col1']>2]
Out[193]: 
      col1  col2  col3
row2     4     5     6
row3     7     8     9

In [196]: df.loc[df['col1']>2,df.iloc[1]>5]
Out[196]: 
      col3
row2     6
row3     9

In [208]: df.iloc[df['col1'].values>2]
Out[208]: 
      col1  col2  col3
row2     4     5     6
row3     7     8     9

布爾索引是一種比較特殊的索引凡怎,通過對pandas或numpy的數(shù)據(jù)模型進(jìn)行邏輯運(yùn)算得到校焦,與源數(shù)據(jù)結(jié)構(gòu)相同,數(shù)據(jù)類型為bool统倒,用于標(biāo)識每個元素是否符合邏輯運(yùn)算的條件寨典。在索引器中使用布爾索引可以篩選出符合條件的數(shù)據(jù)。

在直接索引時房匆,二維布爾索引可以用于篩選DataFrame的元素耸成,形狀不變报亩,不符合條件的元素會被替換為NaN,這一點(diǎn)和numpy不一樣井氢,numpy進(jìn)行同樣形式的篩選時會將符合條件的元素構(gòu)造為新的一維數(shù)組返回弦追;一維布爾索引只可以用于篩選行數(shù)據(jù);

在使用loc索引時花竞,不能使用二維布爾索引劲件,只能針對每個軸使用一維布爾索引,并且必須是由Series運(yùn)算得到的帶有標(biāo)簽索引的布爾索引约急;
在使用iloc索引時零远,同樣不能使用二維布爾索引,只能針對每個軸使用一維布爾索引厌蔽,并且必須是由一維ndarray運(yùn)算得到的不含標(biāo)簽索引的布爾索引(Series.values可得到對應(yīng)的ndarray)牵辣。

(5). 指定值查找
In [141]: df=pd.DataFrame({'a':[np.nan,1,2],'b':[3,np.nan,4]})

In [142]: df
Out[142]: 
     a    b
0  NaN  3.0
1  1.0  NaN
2  2.0  4.0

In [143]: df.isin([2,3])
Out[143]: 
       a      b
0  False   True
1  False  False
2   True  False

In [144]: df.isna()
Out[144]: 
       a      b
0   True  False
1  False   True
2  False  False

isin方法用于查找存在于指定列表中的值,isna方法用于查找NaN值奴饮,兩方法都會返回布爾索引纬向,通常結(jié)合索引器使用。

2. 表連接

pandas提供了類似于sql的join戴卜、merge逾条、concat方法進(jìn)行表連接。

(1). 索引連接
In [227]: df1=pd.DataFrame([[1,2],[3,4]],columns=['col1','col2'],index=[1,0])

In [228]: df2=pd.DataFrame([[5,6],[7,8]],columns=['col3','col4'],index=[0,1])

In [229]: df1.join(df2,how='inner')
Out[229]: 
   col1  col2  col3  col4
1     1     2     7     8
0     3     4     5     6

join方法根據(jù)索引進(jìn)行表連接投剥,how參數(shù)指定連接方式膳帕,有inner內(nèi)連接、outer外連接薇缅、left左連接危彩、right右連接 這幾種,默認(rèn)為left泳桦。

此處的join和sql中的join并不一樣汤徽。

(2). 鍵連接
In [233]: df1=pd.DataFrame({'col1':[1,2,3],'col2':[4,5,6]})

In [234]: df2=pd.DataFrame({'col2':[4,5,7],'col3':[1,2,2]})

In [235]: df1.merge(df2)
Out[235]: 
   col1  col2  col3
0     1     4     1
1     2     5     2

In [237]: df1.merge(df2,how='left',left_on='col1',right_on='col3')
Out[237]: 
   col1  col2_x  col2_y  col3
0     1       4     4.0   1.0
1     2       5     5.0   2.0
2     2       5     7.0   2.0
3     3       6     NaN   NaN

merge方法根據(jù)指定鍵(列)進(jìn)行表連接,通過on參數(shù)(相同鍵)或left_onright_on參數(shù)(不同鍵)指定灸撰,默認(rèn)會將兩表中都存在的鍵作為連接鍵谒府;how參數(shù)指定連接方式,有inner內(nèi)連接浮毯、outer外連接完疫、left左連接、right右連接 這幾種债蓝,默認(rèn)為inner壳鹤。

該方法才是sql中join的等效方法。

(3). 拼接
In [239]: df1=pd.DataFrame({'col1':[1,2,3],'col2':[4,5,6]})

In [240]: df2=pd.DataFrame({'col2':[4,5,7],'col3':[1,2,2]})

In [241]: pd.concat([df1,df2])

Out[241]: 
   col1  col2  col3
0   1.0     4   NaN
1   2.0     5   NaN
2   3.0     6   NaN
0   NaN     4   1.0
1   NaN     5   2.0
2   NaN     7   2.0

In [242]: pd.concat([df1,df2],join='inner')
Out[242]: 
   col2
0     4
1     5
2     6
0     4
1     5
2     7

In [243]: pd.concat([df1,df2],axis=1)
Out[243]: 
   col1  col2  col2  col3
0     1     4     4     1
1     2     5     5     2
2     3     6     7     2

用于拼接表饰迹,等效于sql中的union all芳誓。

axis參數(shù)指定用于拼接的軸余舶,默認(rèn)0;join參數(shù)指定其他軸的處理方式锹淌,inner表示只返回都存在的項(xiàng)匿值,outer表示全部返回,默認(rèn)outer赂摆。

拼接后的結(jié)果表中可能會有行索引或列索引上的重復(fù)挟憔,可以視需要重整索引。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烟号,一起剝皮案震驚了整個濱河市曲楚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褥符,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抚垃,死亡現(xiàn)場離奇詭異喷楣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鹤树,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門铣焊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罕伯,你說我怎么就攤上這事曲伊。” “怎么了追他?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵坟募,是天一觀的道長。 經(jīng)常有香客問我邑狸,道長懈糯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任单雾,我火速辦了婚禮赚哗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘硅堆。我一直安慰自己屿储,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布渐逃。 她就那樣靜靜地躺著够掠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茄菊。 梳的紋絲不亂的頭發(fā)上祖屏,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天助赞,我揣著相機(jī)與錄音,去河邊找鬼袁勺。 笑死雹食,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的期丰。 我是一名探鬼主播群叶,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钝荡!你這毒婦竟也來了街立?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埠通,失蹤者是張志新(化名)和其女友劉穎赎离,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體端辱,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梁剔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舞蔽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荣病。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渗柿,靈堂內(nèi)的尸體忽然破棺而出个盆,到底是詐尸還是另有隱情,我是刑警寧澤朵栖,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布颊亮,位于F島的核電站,受9級特大地震影響陨溅,放射性物質(zhì)發(fā)生泄漏编兄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一声登、第九天 我趴在偏房一處隱蔽的房頂上張望狠鸳。 院中可真熱鬧,春花似錦悯嗓、人聲如沸件舵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铅祸。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間临梗,已是汗流浹背涡扼。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盟庞,地道東北人吃沪。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像什猖,于是被迫代替她去往敵國和親票彪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 什么是pandas pandas是python的一個數(shù)據(jù)分析包不狮,是基于NumPy的一種工具降铸,該工具是為了解決數(shù)據(jù)分...
    TensorFlow開發(fā)者閱讀 2,500評論 0 27
  • 最近一直在忙著處理數(shù)據(jù),以下是我作為python和數(shù)據(jù)分析的入門小白摇零,在最近幾周的工作中總結(jié)的一些經(jīng)驗(yàn)推掸。 一、Pa...
    coder_jerry閱讀 2,348評論 2 50
  • 整理歸納在Python中使用對數(shù)據(jù)處理的常用方法驻仅,包括與HDFS文件的讀寫谅畅,主要是怕用的時候記不住,容易搞混雾家,再搜...
    shohokuooo閱讀 4,201評論 0 50
  • 關(guān)于愛情,但愿它留在我們最初的記憶里绍豁。我曾記得你那回眸的一瞬和那空中落下的雪花芯咧,它優(yōu)雅而美麗的展現(xiàn)出它那璀璨奪目的...
    星空下的低語閱讀 170評論 2 3
  • 楊區(qū)長今天是您離開的第87天,愿您在天堂一切都安好竹揍。 一敬飒、感恩媛媛老師提醒我需要多陪伴兒子了; 二芬位、感恩廚房為我們...
    園桃閱讀 194評論 0 0