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