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的表的数据

猜你喜欢

转载自blog.csdn.net/qwertyuiop5rghar/article/details/84521739