DataFrame对象的loc属性与iloc属性
-
loc属性
-
以列名(columns)和行名(index)作为参数, 当只有一个参数时,默认是行名,即抽取整 行数据,包括所有列。
-
-
iloc属性
-
以行和列位置索引(即:0,1,2,...)作为参数, 0表示第一行,1表示第2行,以此类推。当 只有一个参数时,默认是行索引,即抽取整 行数据,包括所有列。
-
行提取
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
'''
数学 语文 英语
张三 45 65 100
李四 56 45 50
王五 67 67 67
'''
print('--------------------------')
# 提取行数据
print(df.loc['张三']) # 行索引名称
print(df.iloc[0]) # 行索引的编号
'''
数学 45
语文 65
英语 100
Name: 张三, dtype: int64
'''
print('------提取多行数据------(谁和谁)---') #张三和王五
print(df.loc[['张三','王五']])
print(df.iloc[[0,2]])
'''
数学 语文 英语
张三 45 65 100
王五 67 67 67
'''
print('--------提取连续的多行数据(从谁到谁)-----------------') # 从张三到王五
print(df.loc['张三':'王五']) # 行索引名称, 包含王五
'''
数学 语文 英语
张三 45 65 100
李四 56 45 50
王五 67 67 67
'''
print('----------------------------------------')
print(df.iloc[0:2]) # 行索引序号,含0 不含2
'''
数学 语文 英语
张三 45 65 100
李四 56 45 50
'''
print('---------------------------------')
print(df.iloc[1::]) # iloc[start:stop:step]
'''
数学 语文 英语
李四 56 45 50
王五 67 67 67
'''
print('---------------------------------')
print(df.iloc[::2]) # iloc[start:stop:step] 步长为2 从0,1,2 取出0,2
'''
数学 语文 英语
张三 45 65 100
王五 67 67 67
'''
需要注意的是,用loc进行切片操作时,是会取到end的值的,而iloc不会。
前面也提到过,用标签索引切片包含end值,用序号索引切片不包含end值。
列提取
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print('--------------------------')
print(df[['数学','英语']]) # 直接使用列名提取
print('------------------------------')
print(df.loc[:,['数学','英语']]) # 逗号的左侧表示的是行,右侧表示的是列 ,所有行的,数学和英语
print('------------------------------')
print(df.iloc[:,[0,2]])
'''
数学 英语
张三 45 100
李四 56 50
王五 67 67
'''
print('--------------提取连续的列-------------------')
print(df.loc[:,'语文':])
print('------------------------------')
print(df.iloc[:,1:])
'''
语文 英语
张三 65 100
李四 45 50
王五 67 67
'''
区域提取
# 提取区域数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print(df.loc['张三','数学'],type(df.loc['张三','数学']))
print(df.iloc[0,0]) # 第0 行,第0列
'''
45 <class 'numpy.int64'>
'''
print('------------------------------')
print(df.loc[['张三','王五'],['数学','语文']])
print(df.iloc[[0,2],[0,2]]) # 第0行和第2行,第0列和第2列
'''
数学 语文
张三 45 65
王五 67 67
'''
print(df.iloc[0:2,0:2]) # ,的左侧行切片,右侧列切片 ,提取的区域数据为连续的数据
'''
数学 语文
张三 45 65
李四 56 45
'''
print('----------------------------------') # 提取所有行的第0列
print(df.iloc[:,0])
'''
张三 45
李四 56
王五 67
Name: 数学, dtype: int64
'''
条件提取:
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data=[[45,65,100],[56,45,50],[67,67,67]]
index=['张三','李四','王五']
columns=['数学','语文','英语']
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
print(df.loc[df['语文']>=60]) # 提取语文成绩大于等于60的学生信息
'''
数学 语文 英语
张三 45 65 100
王五 67 67 67
'''
# 多个条件之间使用关系运算符
print(df.loc[(df['语文']>=60) & (df['数学']>=60)])
# 王五 67 67 67