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的表的數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章