Python中Pandas的loc
和iloc
的区别与使用实例
在Pandas中,loc
和iloc
是两个常用的方法,用于基于标签(label)和整数位置(integer location)来选择数据。尽管两者在功能上有重叠,但它们在用法和性能上有所不同。下面将详细解释它们之间的区别,并通过实例来演示它们的使用。
loc
vs iloc
loc
:基于标签进行选择。它使用行标签和列标签来选择数据。对于DataFrame,这些标签通常是列名和行索引。iloc
:基于整数位置进行选择。它使用基于0的索引来选择数据,忽略行标签和列标签的实际值。
使用实例
假设我们有一个如下的DataFrame:
import pandas as pd
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 10, 11, 12],
'D': [13, 14, 15, 16]
}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4'])
print(df)
输出:
A B C D
row1 1 5 9 13
row2 2 6 10 14
row3 3 7 11 15
row4 4 8 12 16
使用loc
- 选择索引为’row2’的行:
print(df.loc['row2'])
输出:
A 2
B 6
C 10
D 14
Name: row2, dtype: int64
- 选择列’A’和’C’:
print(df.loc[:, ['A', 'C']])
输出:
A C
row1 1 9
row2 2 10
row3 3 11
row4 4 12
使用iloc
- 选择第二行(基于0的索引):
print(df.iloc[1])
输出:
A 2
B 6
C 10
D 14
Name: row2, dtype: int64
注意,尽管这里我们选择了索引为1的行,但输出的行标签仍然是’row2’,因为iloc
是基于整数位置选择的,而不是基于标签。
- 选择前两列:
print(df.iloc[:, :2])
输出:
A B
row1 1 5
row2 2 6
row3 3 7
row4 4 8
注意事项
- 当DataFrame的索引是整数时,使用
loc
可能会产生混淆,因为此时标签和位置可能会重叠。在这种情况下,使用iloc
会更清晰。 loc
通常比iloc
更快,因为loc
使用标签进行选择,这通常是一个哈希操作,而iloc
可能需要额外的步骤来将整数位置映射到实际的标签。- 在某些情况下,使用
loc
和iloc
的组合可以实现更复杂的选择逻辑。