索引和选择 Pandas DataFrame

2025年3月17日 | 阅读 7 分钟

Pandas 是 Python 中用于数据分析的最重要的库之一。首先,Pandas 中的 DataFrame 就像一个表格或一个具有行和列的二维数组。它是一个可变的异构的数据结构。我们将行和列称为轴。

Pandas 中提供了许多函数来操作 DataFrames 以进行分析。我们可以通过多种方式创建 DataFrame,但使用的函数是

要使用此函数或库中的任何函数,首先,我们必须使用以下方法导入库

在本教程中,我们在一个 Excel 表格 "painters.xlsx" 中创建了一个表格,其中包含关于世界上 20 位最伟大的画家的信息。

Indexing and Selecting a Pandas DataFrame

现在,这是一个 Python 代码,用于将此表格创建为 Pandas DataFrame

输出

Indexing and Selecting a Pandas DataFrame

本教程的标题是“索引和选择 DataFrame”。 就像我们使用从 0 到长度 - 1 的索引来切片字符串一样,我们也可以从现有的 DataFrame 访问、复制和创建新的 DataFrames。本教程将解释所有这些方法。

  1. DataFrame[] 和 DataFrame.column
  2. DataFrame.loc[]
  3. DataFrame.iloc[]
  4. head() 和 tail()

1. [] 和 .

[] 称为索引运算符,. 称为属性运算符 在 Pandas 中。这些运算符用于索引的基本形式和查看 DataFrame 的不同子集。

使用属性运算符(.)

选择列

  • 我们只能使用此运算符从 DataFrame 中选择一个单列。它仅限于具有直接引用的列。这意味着如果列的名称包含空格,Python 将无法跟进

在我们的 Painters 表中

输出

Indexing and Selecting a Pandas DataFrame

请注意,当我们尝试访问“Greatest Artpiece”列时会引发语法错误,因为有空格。 如果我们要访问该属性,可以使用 getattr(DataFrame, column_name) 函数。

输出

Indexing and Selecting a Pandas DataFrame

使用索引运算符

选择列

我们需要将列的名称传递给运算符,但这里对列名中的任何空格没有限制

请注意,列的名称必须用引号括起来传递。

输出

Indexing and Selecting a Pandas DataFrame
  • 此运算符的另一个功能是,我们甚至可以通过将所需列的列表传递给函数来选择多个列

输出

Indexing and Selecting a Pandas DataFrame

选择行

使用切片运算符,我们可以使用相同的索引运算符选择 DataFrame 的行。 切片的语法与任何其他可迭代对象的语法相同

start: 起始索引/行位置(包含)

stop: 停止切片的位置(不包含)

step: 选择行之间的间隔

输出

Indexing and Selecting a Pandas DataFrame

如果我们在创建时使用行标签,我们也可以使用它们。 这是一个例子

输出

Indexing and Selecting a Pandas DataFrame
  • 请注意,还打印了 Member 3 的行。 当我们使用位置进行切片时,结束位置是不包含的,但是当我们使用行标签时,最后一行是包含的。

以下是关于索引运算符的结论要点

  1. 我们可以使用 [] 从 DataFrame 中选择行和列。
  2. 选择列时,我们可以选择单列或多列。
  3. 当我们使用切片运算符时,它将选择行
  4. 我们可以使用位置或 row_labels 对行进行切片。 当我们使用位置时,不会选择最后一行,但是当我们使用 row_labels 时,会选择最后一行。

到目前为止,我们无法同时选择 DataFrame 的行和列。 Pandas 中有两个专门用于选择和子集 DataFrames 的函数。 这些函数具有清晰的功能。 我们现在将了解它们。

2. DataFrame.iloc

语法

行和列都必须是位置而不是标签,并且这些位置可以按如下方式给出

  • 单个位置
  • 多个位置的列表
  • 位置切片

这是我们将要修改的表格

Indexing and Selecting a Pandas DataFrame

请注意,第 0 行和第 0 列分别称为第 1 行和第 1 列。

  • 单个位置

语法

代码

输出

Indexing and Selecting a Pandas DataFrame
  • 位置列表

语法

代码

输出

Indexing and Selecting a Pandas DataFrame
  • 单个位置和位置列表的组合

语法

代码

输出

Indexing and Selecting a Pandas DataFrame
  • 切片

语法

代码

输出

Indexing and Selecting a Pandas DataFrame Indexing and Selecting a Pandas DataFrame

3. DataFrame.loc[rows, columns]

正如我们在上面看到的,iloc[] 在位置上工作,而不是在标签上。 相反,loc[] 在标签上工作,而不是在位置上。 所有其他功能都相同。

行和列都必须是标签,并且这些标签可以按如下方式给出

  • 单个行或列标签
  • 多个标签的列表
  • 标签切片

注意:在行或列标签上使用切片运算符时,结束标签将与起始标签一起包含在内,就像我们使用索引运算符 - [] 进行切片一样

这是我们将要修改的表格

Indexing and Selecting a Pandas DataFrame
  • 单个标签

语法

代码

输出

Indexing and Selecting a Pandas DataFrame
  • 位置列表

语法

代码

输出

Indexing and Selecting a Pandas DataFrame
  • 单个位置和位置列表的组合

语法

代码

输出

Indexing and Selecting a Pandas DataFrame
  • 切片

语法

代码

输出

Indexing and Selecting a Pandas DataFrame
Indexing and Selecting a Pandas DataFrame

观察当我们给出

行:第 1 行、第 2 行和第 3 行

列:打印了“死亡”、“最伟大的艺术品”和“国籍”,这意味着还包括最后一行和最后一列。

带条件

到目前为止,我们使用位置编号或标签从 DataFrame 中选择数据。 我们还可以根据我们需要使用的两种方式 - loc[] 和索引运算符来选择数据

以下是一些重要的要点

1. 我们可以使用任何布尔运算符,但在这里,我们必须使用

2. 我们可以使用任意数量的条件,但每个条件都必须用括号括起来。

输出

Indexing and Selecting a Pandas DataFrame

3. 假设我们要打印所有出生于 1800 年之后的画家。 我们需要检查“出生”列

df["出生"]>1800

这就是条件。 如果我们在检查条件后打印它,我们将获得具有 True 和 False 的列。 现在,如果我们想打印行,我们需要将条件传递给 df[]:

输出

Indexing and Selecting a Pandas DataFrame

4. 使用 loc[],我们可以直接将条件传递给运算符,就像我们传递给 df[] 一样。 我们可以通过使用 loc[] 获得的额外优势是,我们可以使用切片选择列。

这里有一个例子

输出

Indexing and Selecting a Pandas DataFrame

4. head() 和 tail()

这两种方法主要用于从大量数据中查看数据样本。 Head() 用于从开头获取样本,tail() 用于从结尾获取样本。

如果我们不传递任何参数,head() 打印 DataFrame 的前五行,而 tail() 打印 DataFrame 的最后五行。 我们可以通过提及我们需要的行数来传递一个参数。

语法

代码

输出

Indexing and Selecting a Pandas DataFrame