透彻理解 pandas 切片中 df.loc ,df.iloc

发布时间 2023-10-05 09:45:26作者: chris_he01

在处理 pandas 数据框时,选择数据是非常常见的操作。为了满足这种需求,pandas 提供了多种选择数据的方法,其中最常用的是 df.locdf.iloc。尽管它们在许多情况下都可以互换使用,但它们之间确实存在一些关键区别,初学者必须明确这些区别以避免潜在的错误。

1. 基本定义

  • df.loc:基于标签的数据选择方法。
  • df.iloc:基于位置的数据选择方法。

2. 什么是标签?什么是位置?

在深入了解这两种方法之前,我们首先要理解“标签”和“位置”这两个概念。

标签 (Label)

标签是数据框或系列的索引。这些索引可以是数字,也可以是字符串或其他数据类型。例如:

import pandas as pd

data = {'A': ['apple', 'banana', 'cherry']}
df = pd.DataFrame(data, index=['x', 'y', 'z'])
print(df)

输出:

      A

x apple
y banana
z cherry

在上述例子中,'x', 'y', 'z' 就是数据框 df 的标签(或索引)。

位置 (Position)

位置是数据框或系列中的元素的整数位置。无论索引是什么,位置始终从0开始,并按顺序递增。例如,在上述数据框 df 中,'apple' 的位置是 0,'banana' 的位置是 1,'cherry' 的位置是 2。

3. df.loc vs df.iloc

让我们通过一些示例更详细地探讨这两种方法的使用。

示例 1:使用数字索引

data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
print(df)

输出:

    A B
0 1 4
1 2 5
2 3 6

在这个例子中,标签和位置是相同的。所以,df.loc[0:1, 'A']df.iloc[0:1, 0] 会产生相同的结果。

示例 2:使用非连续数字索引

data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data, index=[2, 1, 0])
print(df)

输出:

     A   B
2   1   4
1   2   5
0   3   6

在这种情况下,标签和位置是不同的。所以,df.loc[2:1, 'A'] 选择的是标签为2和1的行,而 df.iloc[0:1, 0] 选择的是位置为0的行。

示例 3:使用字符串索引

data = {'A': ['apple', 'banana', 'cherry']}
df = pd.DataFrame(data, index=['x', 'y', 'z'])
print(df)

输出:

A
x apple
y banana
z cherry

在这种情况下,只有 df.loc 可以使用字符串索引,而 df.iloc 只能使用整数位置。
df.locdf.iloc 在很多情况下都可以用来选择数据,但它们之间的关键区别在于选择的基准:标签还是位置。为了避免混淆和错误,初学者应该始终明确他们正在使用的是哪种选择方法,并确保正确使用它。

希望这篇博客能帮助您更好地理解和使用 pandas 中的 df.locdf.iloc。如果您有任何疑问或需要进一步的帮助,请随时联系我们