欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pandas數(shù)據(jù)選?。篸f[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]

 更新時間:2020年04月24日 10:31:32   作者:奧辰  
這篇文章主要介紹了pandas數(shù)據(jù)選?。篸f[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[],文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1 引言

  Pandas是作為Python數(shù)據(jù)分析著名的工具包,提供了多種數(shù)據(jù)選取的方法,方便實(shí)用。本文主要介紹Pandas的幾種數(shù)據(jù)選取的方法。

  Pandas中,數(shù)據(jù)主要保存為Dataframe和Series是數(shù)據(jù)結(jié)構(gòu),這兩種數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)選取的方式基本一致,本文主要以Dataframe為例進(jìn)行介紹。

  在Dataframe中選取數(shù)據(jù)大抵包括3中情況:

  1)行(列)選取(單維度選?。篸f[]。這種情況一次只能選取行或者列,即一次選取中,只能為行或者列設(shè)置篩選條件(只能為一個維度設(shè)置篩選條件)。

  2)區(qū)域選?。ǘ嗑S選?。篸f.loc[],df.iloc[],df.ix[]。這種方式可以同時為多個維度設(shè)置篩選條件。

  3)單元格選?。c(diǎn)選取):df.at[],df.iat[]。準(zhǔn)確定位一個單元格。

接下來,我們以下面的數(shù)據(jù)為例,分別通過實(shí)例介紹這三種情況。

>>> 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)

>>> df

  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

2 行(列)選?。篸f[]

  行(列)選取是在單一維度上進(jìn)行數(shù)據(jù)的選取,即以行為單位進(jìn)行選取或者以列為單位進(jìn)行選取。Dataframe對象的行有索引(index),默認(rèn)情況下是[0,1,2,……]的整數(shù)序列,也可以自定義添加另外的索引,例如上面的labels,(為區(qū)分默認(rèn)索引和自定義的索引,在本文中將默認(rèn)索引稱為整數(shù)索引,自定義索引稱為標(biāo)簽索引)。Dataframe對象的每一列都有列名,可以通過列名實(shí)現(xiàn)對列的選取。

1)選取行

選取行的方式包括三種:整數(shù)索引切片、標(biāo)簽索引切片和布爾數(shù)組。

a)整數(shù)索引切片:前閉后開

選取第一行:

>>> df[0:1]

 name  age gender isMarried

a Joe 25.0    1    yes

選取前兩行:

>>> df[0:2]

  name  age gender isMarried

a  Joe 25.0    1    yes

b Mike 32.0    0    yes

b)標(biāo)簽索引切片:前閉后閉

選取第一行:

>>> df[:'a']

 name  age gender isMarried

a Joe 25.0    1    yes

選取前兩行:

>>> df['a':'b']

  name  age gender isMarried

a  Joe 25.0    1    yes

b Mike 32.0    0    yes

注意:整數(shù)索引切片是前閉后開,標(biāo)簽索引切片是前閉后閉,這點(diǎn)尤其要注意。

c)布爾數(shù)組

選取前三行

>>> df[[True,True,True,False,False,False,False,False,False,False]]

  name  age gender isMarried

a  Joe 25.0    1    yes

b Mike 32.0    0    yes

c Jack 18.0    1    no

選取所有age大于30的行

>>> df[[each>30 for each in df['age']]]

  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

通過布爾數(shù)組的方式,又可以衍生出下面的選取方式:

選取所有age大于30的行

>>> df[df['age']>30]

  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

選取出所有age大于30,且isMarried為no的行

>>> df[(df['age']>30) & (df['isMarried']=='no')]

  name  age gender isMarried

g Wansi 41.0    0    no

i Jason 37.0    1    no

j  Even 32.0    0    no

選取出所有age為20或32的行

>>> df[(df['age']==20) | (df['age']==32)]

  name  age gender isMarried

b  Mike 32.0    0    yes

f Marry 20.0    1    no

j  Even 32.0    0    no

注意:像上面這種通過多個布爾條件判斷的情況,多個條件最好(一定)用括號括起來,否則非常容易出錯。

2)列選取

列選取方式也有三種:標(biāo)簽索引、標(biāo)簽列表、Callable對象

a)標(biāo)簽索引:選取單個列

選取name列所有數(shù)據(jù)

>>> df['name']

a   Joe

b   Mike

c   Jack

d   Rose

e  David

f  Marry

g  Wansi

h   Sidy

i  Jason

j   Even

Name: name, dtype: object

b)標(biāo)簽列表:選取多個列

選取name和age兩列數(shù)據(jù)

>>> df[['name','age']]

  name  age

a  Joe 25.0

b  Mike 32.0

c  Jack 18.0

d  Rose  NaN

e David 15.0

f Marry 20.0

g Wansi 41.0

h  Sidy  NaN

i Jason 37.0

j  Even 32.0

c)callable對象

選取第一列

>>> df[lambda df: df.columns[0]]

a   Joe

b   Mike

c   Jack

d   Rose

e  David

f  Marry

g  Wansi

h   Sidy

i  Jason

j   Even

Name: name, dtype: object

3 區(qū)域選取

  區(qū)域選取可以從多個維度(行和列)對數(shù)據(jù)進(jìn)行篩選,可以通過df.loc[],df.iloc[],df.ix[]三種方法實(shí)現(xiàn)。采用df.loc[],df.iloc[],df.ix[]這三種方法進(jìn)行數(shù)據(jù)選取時,方括號內(nèi)必須有兩個參數(shù),第一個參數(shù)是對行的篩選條件,第二個參數(shù)是對列的篩選條件,兩個參數(shù)用逗號隔開。df.loc[],df.iloc[],df.ix[]的區(qū)別如下:

  df.loc[]只能使用標(biāo)簽索引,不能使用整數(shù)索引,通過便簽索引切邊進(jìn)行篩選時,前閉后閉。

  df.iloc[]只能使用整數(shù)索引,不能使用標(biāo)簽索引,通過整數(shù)索引切邊進(jìn)行篩選時,前閉后開。;

  df.ix[]既可以使用標(biāo)簽索引,也可以使用整數(shù)索引。

  下面分別通過實(shí)例演示這三種方法。

3.1 df.loc[]

  1)對行進(jìn)行選取

選取索引為‘a(chǎn)'的行:

>>> df.loc['a', :]

name     Joe

age      25

gender     1

isMarried  yes

Name: a, dtype: object

選取索引為‘a(chǎn)'或‘b'或‘c'的行

>>> df.loc[['a','b','c'], :]

  name  age gender isMarried

a  Joe 25.0    1    yes

b Mike 32.0    0    yes

c Jack 18.0    1    no

選取從‘a(chǎn)'到‘d'的所有行(包括‘d'行)

>>> df.loc['a':'d', :]

  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

用布爾數(shù)組選取前3行

>>> df.loc[[True,True,True,False,False,False], :]

  name  age gender isMarried

a  Joe 25.0    1    yes

b Mike 32.0    0    yes

c Jack 18.0    1    no

選取所有age大于30的行

>>> df.loc[df['age']>30,:]

  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

也可以使用下面兩方法:

>>> df.loc[df.loc[:,'age']>30, :]

  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

>>> df.loc[df.iloc[:,1]>30, :]

  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

用callable對象選取age大于30的所有行

>>> df.loc[lambda df:df['age'] > 30, :]

  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

2)對列選取

輸出所有人的姓名(選取name列)

>>> df.loc[:, 'name']

a   Joe

b   Mike

c   Jack

d   Rose

e  David

f  Marry

g  Wansi

h   Sidy

i  Jason

j   Even

Name: name, dtype: object

輸出所有人的姓名和年齡(選取name和age列)

>>> df.loc[:, 'name':'age']

  name  age

a  Joe 25.0

b  Mike 32.0

c  Jack 18.0

d  Rose  NaN

e David 15.0

f Marry 20.0

g Wansi 41.0

h  Sidy  NaN

i Jason 37.0

j  Even 32.0

輸出所有人的姓名、年齡、婚否(選取name、age、isMarried列)

>>> df.loc[:, ['name','age','isMarried']]

  name  age isMarried

a  Joe 25.0    yes

b  Mike 32.0    yes

c  Jack 18.0    no

d  Rose  NaN    yes

e David 15.0    no

f Marry 20.0    no

g Wansi 41.0    no

h  Sidy  NaN    yes

i Jason 37.0    no

j  Even 32.0    no

用布爾數(shù)組的方式選取前3列

>>> df.loc[:, [True,True,True,False]]

  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

3)同時對行和列進(jìn)行篩選

輸出年齡大于30的人的姓名和年齡

>>> df.loc[df['age']>30,['name','age']]

  name  age

b  Mike 32.0

g Wansi 41.0

i Jason 37.0

j  Even 32.0

輸出行名為‘Mike'或‘Marry'的姓名和年齡

>>> df.loc[(df['name']=='Mike') |(df['name']=='Marry'),['name','age']]                          

  name  age

b  Mike 32.0

f Marry 20.0

3.2 df.iloc[]

1)行選取

選取第2行

>>> df.iloc[1, :]

name     Mike

age      32

gender     0

isMarried   yes

Name: b, dtype: object

選取前3行

>>> df.iloc[:3, :]

  name  age gender isMarried

a  Joe 25.0    1    yes

b Mike 32.0    0    yes

c Jack 18.0    1    no

選取第2行、第4行、第6行

>>> df.iloc[[1,3,5],:]

  name  age gender isMarried

b  Mike 32.0    0    yes

d  Rose  NaN    1    yes

f Marry 20.0    1    no

通過布爾數(shù)組選取前3行

>>> df.iloc[[True,True,True,False,False,False], :]

  name  age gender isMarried

a  Joe 25.0    1    yes

b Mike 32.0    0    yes

c Jack 18.0    1    no

2)列選取

選取第2列

>>> df.iloc[:, 1]

a  25.0

b  32.0

c  18.0

d   NaN

e  15.0

f  20.0

g  41.0

h   NaN

i  37.0

j  32.0

Name: age, dtype: float64

選取前3列

>>> df.iloc[:, 0:3]

  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

l 選取第1列、第3列、第4列

選取第1列、第3列和第4列

>>> df.iloc[:, [0,2,3]]

  name gender isMarried

a  Joe    1    yes

b  Mike    0    yes

c  Jack    1    no

d  Rose    1    yes

e David    0    no

f Marry    1    no

g Wansi    0    no

h  Sidy    0    yes

i Jason    1    no

j  Even    0    no

通過布爾數(shù)組選取前3列

>>> df.iloc[:,[True,True,True,False]]
  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

3)同時選取行和列

選取第2行的第1列、第3列、第4列

>>> df.iloc[1, [0,2,3]]

name     Mike

gender     0

isMarried   yes

Name: b, dtype: object

選取前3行的前3列

>>> df.iloc[:3, :3]

  name  age gender

a  Joe 25.0    1

b Mike 32.0    0

c Jack 18.0    1

3.3 df.ix[]

  df.ix[]既可以通過整數(shù)索引進(jìn)行數(shù)據(jù)選取,也可以通過標(biāo)簽索引進(jìn)行數(shù)據(jù)選取,換句話說,df.ix[]是df.loc[]和df.iloc[]的功能集合,且在同義詞選取中,可以同時使用整數(shù)索引和標(biāo)簽索引。

選取第3行的name數(shù)據(jù)

>>> df.ix[2,'name']
'Jack'

選取a行、c行的第1列,第2列和第4列數(shù)據(jù)

>>> df.ix[['a','c'], [0,1,3]]

  name  age isMarried

a  Joe 25.0    yes

c Jack 18.0    no

選取所有未婚者的姓名和年齡

>>> df.ix[df['isMarried']=='no',['name','age']]

  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

4 單元格選取

  單元格選取包括df.at[]和df.iat[]兩種方法。df.at[]和df.iat[]使用時必須輸入兩個參數(shù),即行索引和列索引,其中df.at[]只能使用標(biāo)簽索引,df.iat[]只能使用整數(shù)索引。df.at[]和df.iat[]選取的都是單個單元格(單行單列),所以返回值都為基本數(shù)據(jù)類型。

4.1 df.at[]

選取b行的name列

>>> df.at['b','name']

'Mike'

4.2 df.iat[]

選取第2行第1列

>>> df.iat[1,0]

'Mike'

5 拓展與總結(jié)

  1)選取某一整行(多個整行)或某一整列(多個整列)數(shù)據(jù)時,可以用df[]、df.loc[]、df.iloc[],此時df[]的方法書寫要簡單一些。

  2)進(jìn)行區(qū)域選取時,如果只能用標(biāo)簽索引,則使用df.loc[]或df.ix[],如果只能用整數(shù)索引,則用df.iloc[]或df.ix[]。不過我看到有資料說,不建議使用df.ix[],因為df.loc[]和df.iloc[]更精確(有嗎?我沒理解精確在哪,望告知)。

  3)如果選取單元格,則df.at[]、df.iat[]、df.loc[]、df.iloc[]都可以,不過要注意參數(shù)?! ?/p>

  4)選取數(shù)據(jù)時,返回值存在以下情況:

  • 如果返回值包括單行多列或多行單列時,返回值為Series對象;
  • 如果返回值包括多行多列時,返回值為DataFrame對象;
  • 如果返回值僅為一個單元格(單行單列)時,返回值為基本數(shù)據(jù)類型,例如str,int等。

  5)df[]的方式只能選取行和列數(shù)據(jù),不能精確到單元格,所以df[]的返回值一定DataFrame或Series對象。

  6)當(dāng)使用DataFrame的默認(rèn)索引(整數(shù)索引)時,整數(shù)索引即為標(biāo)簽索引。例如,使用上面的data實(shí)例化一個DataFrame對象:

>>> df2 = pd.DataFrame(data)

>>> df2.loc[1,'name']

'Mike'

>>> df2.iloc[1,0]

'Mike'

到此這篇關(guān)于pandas數(shù)據(jù)選?。篸f[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]的文章就介紹到這了,更多相關(guān)pandas 數(shù)據(jù)選取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論