1. 程式人生 > >loc,iloc,列索引,布林索引的使用

loc,iloc,列索引,布林索引的使用

結論:
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的表的資料