Pandas中loc,iloc與直接切片的區別

2021-09-06 09:48:27 字數 2124 閱讀 2620

0. 把series的行index或dataframe的列名直接當做屬性來索引。

如:s.index_name

df.column_name

但是這種方法索引的名字可能會與自帶的方法衝突,比如min,max等等,所以可能會失效。另外,在新版本中,這種索引方法不能作為左值。

1. df直接索引

直接索引索引的是列,方口號裡面的內容一般是列索引名。也可以接受乙個列名組成的list來接受多個列名。

df['a']

df[['a', 'b']]

如果要交換兩列,直接用這樣的方法是不對的:

df.loc[:,['b', 'a']] = df[['a', 'b']]

這是因為pandas預設在賦值的時候回匹配列名,這裡面的ab和ba實際上沒有區別。如果想要交換兩列的話,應該使用ab兩列的值作為右值,這樣就不帶列索引名了。

df.loc[:,['b', 'a']] = df[['a', 'b']].values

索引slice物件,索引的是行,因為這樣做更加符合常理

複製**

df=pd.dataframe(np.arange(16).reshape((4,4)),index=list(range(4)),columns=['a','b','c','d'])

dfout[4]:

a b c d

0 0 1 2 3

1 4 5 6 7

2 8 9 10 11

3 12 13 14 15

複製**

df[0:1]

out[6]:

a b c d

0 0 1 2 3

這裡如果是series,就可以使用單獨的數字來索引;如果是dataframe,就不可以,需要使用python的slice物件形式的來索引。

2. loc,基於label的索引

由於pandas處理的是具有標籤的**物件,所以設計一套基於標籤的索引方法是必要的,這就是loc

loc索引要注意的是:

loc是基於標籤的,如果給出的索引中包含沒有的標籤,會報錯

loc索引的開閉區間機制和python傳統的不同,而是與matlab類似的雙側閉區間,即只要出現,就會包含該標籤

數字也可以放入loc中當做索引,但是這時數字指的是標籤而不是 位置

複製**

df.loc[0:3,'a':'c']

out[9]:

a b c

0 0 1 2

1 4 5 6

2 8 9 10

3 12 13 14

複製**

注意上面的0:3實際上並不是數字,而是行的label。

loc也可以接受布林索引來取出其中的一些行

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

3. iloc,完全基於位置的索引

iloc的用法完全和numpy中的數字索引一樣,開閉區間的邏輯也和python是相同的。

要注意的是,如果iloc方括號中直接給定乙個數字或者乙個slice的話,預設索引的是行。其中數字的情況會返回乙個series

複製**

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

out[21]:

a b c d

0 0 1 2 3

1 4 5 6 7

2 8 9 10 11

3 12 13 14 15

df.loc[:,df.loc[1]>4]

out[22]:

b c d

0 1 2 3

1 5 6 7

2 9 10 11

3 13 14 15

df.iloc[1]

out[23]:

a 4

b 5

c 6

d 7

name: 1, dtype: int32

type(df.iloc[1])

out[24]: pandas.core.series.series```

Pandas的loc,iloc與ix的用法及區別

1.先來談一談loc,loc這個方法就是你有啥我就用啥,你沒有的我不用,pandas物件的index,columns有什麼,pd.loc index,column index就是pd.index的其中的乙個值或者是其中幾個值組成的序列,或就是pd.index,column是pd.columns中的乙...

Pandas中loc,iloc和ix的區別

這篇部落格 直接看例子 data pd.series np.arange 10 index 49,48,47,46,45,1,2,3,4,5 data490 481472 463454 1526 3748 59dtype int64 data.iloc 3 490 481472 dtype int6...

Pandas中loc iloc及ix的區別

import pandas as pd import numpy as np df np.array a 23 b 13 c 15 table pd.dataframe df,index a b c columns left right print table 輸出結果 left right a a...