在Python的Pandas库中,loc
和iloc
都是用于索引DataFrame数据的重要工具。它们之间的主要区别在于索引方式:loc
是基于标签的索引,而iloc
是基于整数位置的索引。
loc:
介绍:
-
loc
是基于行标签(index)和列标签(columns)进行选择的。 -
语法:
dataframe.loc[行标签, 列标签]/
loc[index切片或列表,columns切片或列表] -
可以同时选择多行和多列
示例如下:
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 19, 18],
'Height': [180, 175, 179, 169]}
df = pd.DataFrame(data)
# 使用loc选择行和列
print(df.loc[1:3, ['Name', 'Age']]) # 选择第2行到第4行(基于0的索引),以及'Name'和'Age'列
使用方法:
- 访问某一行:.loc[index的值]
- 访问连续的某几行:.loc[起始index的值:结束index的值](切片表示法,包含结束值)
- 访问不连续的某几行:.loc[[第一个index,第二个index,第三个index......]](列表表示法)
- 访问单个元素:.loc[index的值,columns的值]
- 访问多个元素:.loc[index切片或列表,columns切片或列表]
输出为:
Name Age
1 Nick 21
2 John 19
3 Tom 18
iloc:
介绍:
-
iloc
是基于行号和列号进行选择的,与NumPy数组的索引方式非常相似。 -
语法:
dataframe.iloc[行号, 列号]/
iloc[index切片或列表,columns切片或列表] -
行号和列号都是从0开始的整数。
示例如下:
import pandas as pd
# 创建一个DataFrame(同上例)
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 19, 18],
'Height': [180, 175, 179, 169]}
df = pd.DataFrame(data)
# 使用iloc选择行和列
print(df.iloc[1:3, [0, 1]]) # 选择第2行到第3行(不包括第4行),以及第1列和第2列(基于0的索引)
输出为:
Name Age
1 Nick 21
2 John 19
使用方法:
- 访问某一行:.iloc[index的位置]
- 访问连续的某几行:.iloc[起始index的位置:结束index的位置](切片表示法,不包含结束值)
- 访问不连续的某几行:.iloc[[第一个index,第二个index,第三个index......]](列表表示法)
- 访问单个元素:.iloc[index的位置,columns的位置]
- 访问多个元素:.iloc[index切片或列表,columns切片或列表]
注意事项:
- 当使用
loc
进行切片时,结束索引是包含的,要特别注意,如上述第一个例子。 - 当使用
iloc
进行切片时,结束索引是不包含的,这与Python的列表切片行为是一致的。 - 在选择数据时,要确保所使用的索引方式(标签或位置)与DataFrame的实际结构相匹配,否则可能会引发错误。
- 如果只传入一个索引(无论是行还是列),则必须确保该索引在DataFrame的对应维度中存在,否则会引发
KeyError
或IndexError
。 - 中括号里的中括号代表列表。