loc,iloc,列索引,布林索引的使用
阿新 • • 發佈:2018-11-29
結論:
1,loc,iloc,df.ename,df[‘ename’],df[[‘ename’]]都是引用的方式進行訪問,也就是說被引用的資料發生改變,那麼df資料也會發生改變
2,如果只拿一列(一個特徵值)資料,那麼返回的一般是Series型別,達到兩列或者以上,一般是Dataframe型別
3,loc[0:1,:],iloc[0:1,:],對於loc是location的縮寫,iloc中的i是integer,
loc[0:1,:]包括兩行資料;而iloc[0:1,:]只有一行資料,這是不一樣的地方
4,通過他們訪問的函式方法 預設的inplace=False,也就是說在inplace=False的時候,複製某些資料,為True的時候直接引用。
程式碼如下:
import pandas as pd df = pd.read_csv('data.csv',header=0) # In[] # loc:location的縮寫 # iloc:index of location :通過索引進行引用 # 在這裡需要注意一個小細節: df.loc[0:1] 包含的是兩組資料,而df.iloc[0:1] 是隻有0行資料資料 print(type(df.loc[0])) # series 引用 print(type(df.loc[0:1])) # Dataframe 引用 , 有兩列資料 print(type(df.iloc[0])) # series 引用 print(type(df.iloc[0:1])) # DataFrame 引用 print(type(df.loc[0:1,'empno'])) # Series print(type(df.loc[1,'empno'])) #numpy.int64 # 這兩中用法是一樣的,等效的 print(type(df.loc[0:1,'empno':'ename'])) print(type(df.loc[0:1,['empno','ename']])) # Dataframe 不支援 df[0:1,0:1]的這種numpy的切片做法 # df[0:1,0:1] # 報錯 # 但是支援 df[0:1][0:1]的用法,但是不建議使用這種 print(df[0:1][0:1]) # In[] # 列索引 print(type(df['empno'])) # series ,引用 print(type(df[['empno','ename']])) # Dataframe 引用 print(type(df.empno)) # Series ,引用 ''' 通過下面的程式碼可以求證. df['empno'] = df.ename df[['ename','empno']] = df[['job','mgr']] ''' # 注意:剛剛所有的都是引用型別,也就是說,我們在更改之後,是可以改變元資料, # 而在呼叫方法的時候,比如:df.empno.replace(inplace = False) :這個時候是 # 不改變源資料,因為df.empno是引用,所以在inplace 設定為False的時候 會把相應資料先複製一份在進行處理. # In[] # 布林索引的使用 print(df[df.empno<=7900]) print(df.loc[df.empno<=7900,['ename','job']]) # 注意:括號不能少 print(df.loc[(df.empno<=7900) & (df.job == 'CLERK'),['ename','job']])
資料我是使用的oracle的emp的表的資料