pandas中選取方式有很多種,最常用的是一下幾種:直接選取(單維度選取)、iloc();loc();ix()函數(shù)選取(區(qū)域選區(qū)),at();iat()函數(shù)選取(單元格選取)。
通過(guò)以上幾種方式可以實(shí)現(xiàn):選取某些行、某些列、某區(qū)域(同時(shí)選擇某些行和某些列)、某個(gè)單元格,還可以進(jìn)行條件選區(qū)。具體實(shí)現(xiàn)方法如下。
首先創(chuàng)建一個(gè)DataFrame.
import pandas as pd
import numpy as np
data = {'name': ['Joe', 'Mike', 'Jack', 'Rose', 'David', 'Marry', 'Wansi',
'Sidy', 'Jason', 'Even'],
'age': [25, 32, 18, np.nan, 15, 20, 41, np.nan, 37, 32],
'gender': [1, 0, 1, 1, 0, 1, 0, 0, 1, 0],
'isMarried': ['yes', 'yes', 'no', 'yes', 'no',
'no', 'no', 'yes', 'no', 'no']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df = pd.DataFrame(data, index = labels)
print(df)
輸出結(jié)果為:
name age gender isMarried
a Joe 25.0 1 yes
b Mike 32.0 0 yes
c Jack 18.0 1 no
d Rose NaN 1 yes
e David 15.0 0 no
f Marry 20.0 1 no
g Wansi 41.0 0 no
h Sidy NaN 0 yes
i Jason 37.0 1 no
j Even 32.0 0 no
1. 直接選取
選取行:直接在定義的df后加[ ],然后輸入數(shù)字索引或者定義的行標(biāo)簽,可以使用切片。
選取列:直接在定義的df后加[ ],然后輸入定義的列標(biāo)簽,不能使用切片。
選取行使用切片時(shí)應(yīng)注意,數(shù)字索引為左閉右開(kāi),自己定義的標(biāo)簽索引為左閉右閉。
#選取行
df[0 : 2]#左閉右開(kāi)
df[:1]
df['a' : 'c']#左閉右閉
#選取列
df['name']
df[['name', 'age']]#多個(gè)列的時(shí)候要用兩個(gè)[]
df[lambda df: df.columns[0]]#選取第一列
注意:直接選取列時(shí)不能使用切片
df[['name': 'gender']]#選取列時(shí)使用切片會(huì)報(bào)錯(cuò)
df[['name': 'gender']]
^
SyntaxError: invalid syntax
用直接選取來(lái)進(jìn)行條件選取
#條件選取行
df[[i > 30 for i in df['age']]]
df[df['age'] > 30]
上面兩個(gè)輸出如下
name age gender isMarried
b Mike 32.0 0 yes
g Wansi 41.0 0 no
i Jason 37.0 1 no
j Even 32.0 0 no
當(dāng)條件有多個(gè)時(shí),可以用&,|, !=等連接多個(gè)條件,但是符號(hào)前后要加()
#篩選出年齡大于30且未婚的人
df[(df['age'] > 30) & (df['isMarried'] == 'no')]#多個(gè)條件,每個(gè)條件要用()括起來(lái)
輸出結(jié)果為:
name age gender isMarried
g Wansi 41.0 0 no
i Jason 37.0 1 no
j Even 32.0 0 no
2.loc()、 iloc()、ix()選取區(qū)域
這三個(gè)的功能相同,都能同時(shí)選取行和列,從而選取某個(gè)區(qū)域或者某(些)行或列。但是其用法不同。區(qū)別如下:
loc[],只能用標(biāo)簽選取,前閉后閉
iloc[],只能用整數(shù)選取,前閉后開(kāi)
ix[], 可以使用標(biāo)簽和整數(shù)。不管用哪個(gè)索引,均為左閉右閉。
另外, 三種方法都可以時(shí)用切片,也可以進(jìn)行條件選取。
loc()的用法舉例
#.loc[],只能用標(biāo)簽選取,前閉后閉
#選取行
df.loc['a', :]
df.loc['a']#默認(rèn)所有列
df.loc['a':'c', :]#使用切片時(shí)不用加[ ]
df.loc[['a', 'c'], ['name', 'age']]#選擇某個(gè)區(qū)域,選擇多個(gè)單獨(dú)的行時(shí),要加[ ],相當(dāng)于創(chuàng)建一個(gè)所選行或列的列表
df.loc[df['age'] > 30, : ]#條件選取
#選擇列
df.loc[:, 'name']
df.loc[:, 'name' : 'isMarried']#使用切片時(shí)不用加[ ]
df.loc[:, ['name', 'isMarried']]#選擇多個(gè)單獨(dú)的列時(shí),要加[ ]
df.loc[df['age'] > 30, ['name', 'age']]#條件選取
#輸出行名為‘Mike’或‘Marry’的姓名和年齡
df.loc[(df['name'] == 'Mike') | (df['name'] == 'Marry'), ['name', 'age']]
輸出為:
name age
b Mike 32.0
f Marry 20.0
iloc()用法舉例
#iloc[],只能用整數(shù)選取,前閉后開(kāi)
#選取行
df.iloc[0, :]
df.iloc[0]#默認(rèn)所有列
df.iloc[0 : 3, :]#使用切片時(shí)不用加[ ]
df.iloc[[0, 3], :]##選擇某個(gè)區(qū)域,選擇多個(gè)單獨(dú)的行時(shí),要加[ ]
#df.iloc[df.iloc[0] > 30, :]不可行
#選取列
df.iloc[:, 0]
df.iloc[:, 0 : 3]#不包含第四列
df.iloc[:, [0, 3]]#第一列和第四列
#同時(shí)選取行和列(選取區(qū)域)
df.iloc[1, [0, 2, 3]]
df.iloc[: 3, : 3]
ix()方法
其用法與loc()和iloc()用法相同
不管使用標(biāo)簽還是數(shù)字索引,選擇區(qū)間都為左閉右閉(下面的舉例可以看出)。
#ix[], 可以使用標(biāo)簽和整數(shù)
>>>df.ix[2, 'name']#第1行,name列(相當(dāng)于選擇了單個(gè)單元格)
Out[15]: 'Jack'
>>>df.ix[['a', 'c'], [0, 3, 1]]#選擇了若干個(gè)單元格
Out[16]:
name isMarried age
a Joe yes 25.0
c Jack no 18.0
>>>df.ix[2: 5]#選取某些行,左閉右閉
Out[19]:
name age gender isMarried
c Jack 18.0 1 no
d Rose NaN 1 yes
e David 15.0 0 no
>>>df.ix[:, 'name': 'gender']#選取某些列,左閉右閉
Out[20]:
name age gender
a Joe 25.0 1
b Mike 32.0 0
c Jack 18.0 1
d Rose NaN 1
e David 15.0 0
f Marry 20.0 1
g Wansi 41.0 0
h Sidy NaN 0
i Jason 37.0 1
j Even 32.0 0
>>>df.ix[2: 5, 'name': 'gender']#選取一塊區(qū)域,左閉右閉
Out[18]:
name age gender
c Jack 18.0 1
d Rose NaN 1
e David 15.0 0
>>>df.ix[df['isMarried'] == 'no', ['name', 'age']]#選擇符合未婚條件的某區(qū)域
Out[17]:
name age
c Jack 18.0
e David 15.0
f Marry 20.0
g Wansi 41.0
i Jason 37.0
j Even 32.0
3. at[ ]、iat[ ]選取單元格
#.at[],只能用標(biāo)簽索引
df.at['a', 'name']
Out[21]: 'Joe'
#.iat[],只能用整數(shù)索引
df.iat[1, 0]
Out[22]: 'Mike'
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

