使用Python Pandas中的[ ]、loc和iloc按名称或索引选择行和列

2025年3月6日 | 阅读 10 分钟

在 Pandas 中选择 DataFrame 的数据行和列称为索引。可以选择所有行和一定数量的列,所有行和特定数量的列,或者每行和每列的特定数量。索引的另一个名称是子集选择。

在 Pandas 中创建 DataFrame 以选择行和列

Pandas 可以通过多种方式按索引选择列。在本节中,我们将讨论三种常用的技术来实现此目的。

  • Pandas 使用 [] 按索引选择列
  • Pandas 使用 Loc 按索引选择列
  • Pandas 使用 iloc 按索引选择列

创建元组列表

此示例中的代码定义了一个包含员工姓名、年龄、城市和薪水的元组列表。例如,一个包含“姓名”、“年龄”、“城市”和“工资”列名的元组集合。

说明

此 Python 程序采用一个包含员工数据的元组列表,并使用 panda 模块从中生成一个名为 'df' 的 DataFrame 对象。DataFrame 的列标记为“姓名”、“年龄”、“城市”和“工资”。每个元组代表一个员工的详细信息,包括姓名、年龄、城市和收入。该应用程序导入 panda 库,指定员工数据元组列表,并使用 pd.DataFrame() 函数构建 DataFrame 对象,然后显示 DataFrame。

输出

 
            Name	          Age	City	            Salary
0	Sandy	           28	Boston	20000
1	Stacey          32	Florida	             25000
2	Jack	25	New York	40000
3	Stacey	32	Florida	            35000
4	Stacey	32	Florida	            30000
5	Stacey	32	New York	20000
6	Jack	40	Long Island	24000
7	Robin	            32	Florida	            70000   

Pandas DataFrame:使用 [] 按名称选择列

您可以使用 [] 函数通过说出其名称来选择一列。有几种方法可以利用 [] 函数按名称或索引在 Pandas DataFrame 中选择行和列。以下是一些常用的方法。

  • 选择单列
  • 选择多列
  • 选择特定列值的行
  • 基于工资条件选择行

Pandas 选择单列的列

示例:此示例代码使用方括号表示法从 DataFrame(称为“df”)中提取“City”列,并将其分配给变量“result”。最后,显示提取的列或 Series。

说明

Python 代码片段中的 [] 运算符选择 DataFrame 列“City”,结果保存在变量“result”中。所选列列出了与每个员工信息相关的城市。最后使用 ' result' 变量显示 DataFrame 中指定的员工的城市。

输出

 
0      Boston
1       Florida
2      New York
3       Florida
4       Florida
5       New York
6      Long Island
7       Florida
Name: City, dtype: object   

Pandas 选择多列的列

示例

此示例代码采用原始 DataFrame `df`,并选择并生成一个新 DataFrame `result`,其中仅包含“Name”、“Age”和“Salary”列。然后显示新 DataFrame。

说明

此 Python 代码示例展示了如何通过使用 [] 运算符从 DataFrame “df”中选择多个列(“Name”、“Age”和“Salary”)。变量 ' result' 保存所选列的值,结果 DataFrame 显示员工的姓名、年龄和工资。

输出

 
      Name       Age    Salary
0    Sandy          28    20000
1    Stacey    32    25000
2    Jack    25    40000
3    Stacey    32    35000
4    Stacey    32    30000
5    Stacey    32    20000
6    Jack    40    24000
7    Robin     32    70000   

Pandas 选择特定列值的行

示例

此示例代码输出 DataFrame,包括来自佛罗里达州的员工,在过滤并选择 DataFrame `df` 中 'City' 列等于 'Florida' 的行之后。

说明

此 Python 代码将结果存储在变量 "Florida_employees" 中,并过滤 DataFrame "df" 以选择 "City" 列值为 "Florida" 的行。然后在此过滤后的 DataFrame 中打印来自佛罗里达州的员工的信息,包括他们的姓名、年龄、城市和工资。

输出

 
   Name      Age   City     Salary
1  Stacey   32   Florida   25000
3  Stacey   32  Florida   35000
4  Stacey   32   Florida   30000
7  Robin      32  Florida   70000   

基于工资条件选择行

示例

使用一个名为 "employees" 的集合,示例代码生成了一个工资超过 30000 的员工列表。然后输出名为 "high_salary_employees" 的结果列表。

说明

元组中的第四个元素,即员工的工资,必须超过 30,000 美元,Python 代码才能过滤员工列表。创建的 'high_salary_employees' 列表包含满足此要求的员工信息元组。输出显示工资超过 30000 的员工的姓名、年龄、城镇和收入。

输出

 
[('Jack,' 25, 'New York,' 40000), ('Stacey,' 32, 'Florida,' 35000), ('Robin,' 32, 'Florida,' 70000)]   

使用 loc 在 Pandas DataFrame 中按名称选择行

数据使用行和列的标签进行选择。loc[] 方法。它可以选择行和列的子集。此函数可以以多种方式使用。

  • 选择单行
  • 选择多行
  • 选择多行和特定列
  • 选择所有行和某些特定列

选择单行

示例

此示例代码使用 .loc[] 运算符选择并显示索引值为 "Sandy" 的行,此前已将 "Name" 列设置为名为 "df" 的 DataFrame 的索引。

说明

此 Python 代码示例展示了如何使用 inplace=True 选项的 set_index() 方法将 DataFrame 替换为原位,并将 "Name" 列设置为索引。接下来,它使用 .loc[] 访问器将基于索引值 "Sandy" 选择的单行分配给变量 result。最后,它使用 .loc[] 访问器显示所选行的信息,如年龄、城市和工资。

输出

 
Age             28
City      Boston
Salary       20000
Name: Sandy, dtype: object   

选择多行

示例

此示例代码使用 .loc[] 运算符选择并显示索引值为 "Sandy" 和 "Robin" 的行,此前已将 "Name" 列设置为名为 "df" 的 DataFrame 的索引。

说明

此代码使用带 inplace=True 参数的 set_index() 函数就地执行操作并将 "Name" 列设置为 DataFrame df 的索引。然后将结果存储在 result 变量中。它首先使用 .loc[] 访问器根据索引标签 "Sandy" 和 "Robin" 选择某些行。最后,它使用 .loc[] 访问器显示所选行的信息,如年龄、城市和工资。

输出

 
             Age    City           Salary
Name            
Sandy       28     Boston    20000
Robin    32    Florida          70000

选择多行和特定列

语法

示例

此示例代码将 "Name" 列设置为索引,然后选择 DataFrame 中名为 "Sandy" 和 "Robin" 的行的 "City" 和 "Salary" 列,显示结果。

说明

此代码段首先使用 set_index() 函数和 inplace=True 将 DataFrame df 的 "Name" 列设置为索引,从而就地修改 DataFrame。然后,仅使用指定的 "City" 和 "Salary" 列进行选择,它使用 .loc[] 访问器选择所有行(:)。最后,它显示包含所有行所需列的生成的 DataFrame。

输出

 
              City         Salary
Name        
Sandy    Boston    20000
Robin    Florida      70000   

选择所有行和某些特定列

要选择所有行和所需列集,我们使用单个冒号 [:],如下所示

语法

示例

此示例代码将 "Name" 列设置为索引,并将 "City" 和 "Salary" 列提取到一个名为 "result" 的新 DataFrame 中。

说明

此代码段首先使用 set_index() 函数和 inplace=True 将 DataFrame df 的 "Name" 列设置为索引,从而就地修改 DataFrame。然后,仅使用指定的 "City" 和 "Salary" 列进行选择,它使用 .loc[] 访问器选择所有行(:)。最后,它显示包含所有行所需列的生成的 DataFrame。每一行代表一名员工,并显示该员工的城市和工资详细信息。

输出

 
             City      Salary
Name        
Sandy        Boston    20000
Stacey    Florida        25000
Jack    New York    40000
Stacey    Florida         35000
Stacey    Florida        30000
Stacey    New York    20000
Jack    Long Island   24000
Robin      Florida          70000   

在 Pandas DataFrame 中使用 iloc 选择行和列

基于位置的选择通过 iloc[] 进行。虽然它只需要整数值来进行选择,但它与 loc[] 索引器相当。此函数可以以多种方式使用。

  • 选择单行
  • 选择多行
  • 选择多行和某些特定列
  • 选择所有行和某些特定列

选择单行

示例

在此示例代码中,使用基于整数位置的索引 .iloc[],选择 DataFrame (df) 的第三行并将其分配给变量 "result"。最后一行打印或返回所选行。

说明

此代码使用 .iloc[] 索引器根据其整数位置选择 DataFrame df 中的单行。这里,它选择了第二行(索引位置 3),并显示了相关信息,包括员工姓名、年龄、城市和薪水。

输出

 
Name      Jack
Age            25
City       New York
Salary      40000
Name: 2, dtype: object   

选择多行

示例

此示例代码使用 .iloc[] 运算符从名为 "df" 的 DataFrame 中选择特定行(索引 2、3 和 5),然后将结果行分配给变量 "result"。最后一行显示 DataFrame 中的所选行。

说明

此示例代码展示了如何使用 .iloc[] 索引器根据整数位置从 DataFrame df 中选择多行。这里,它选择了索引位置 2、3 和 5 处的行,并显示了相关员工的姓名、年龄、城市和收入。

输出

 
        Name    Age    City         Salary
2    Jack    25    New York    40000
3    Stacey    32    Florida         35000
5    Stacey    32    New York    20000  

选择多行和某些特定列

示例

此示例代码创建一个名为 `result` 的新 DataFrame,显示所选数据,并使用 `.iloc[]` 运算符从名为 `df` 的 DataFrame 中选择特定行(2、3 和 5)和列(0 和 1)。

说明

此示例代码展示了如何使用 .iloc[] 索引器根据整数位置从 DataFrame df 中选择多行。这里,它选择了索引位置 2、3 和 5 处的行,并显示了相关员工的姓名、年龄、城市和收入。

输出

 
      Name    Age
2    Jack    25
3    Stacey    32
5    Stacey    32 

选择所有行和某些特定列

示例

此示例代码使用 `.iloc[]` 运算符选择 DataFrame `df` 的所有行,同时仅保留位置 0 和 1 的列。然后将结果存储在变量 `result` 中。最后,显示更新后的 DataFrame。

说明

此小程序通过其整数位置仅指定几列,但使用 .iloc[] 索引器从 DataFrame df 中选择所有行。这里,它选择了位置 0 和 1 处的“姓名”和“年龄”列。结果 DataFrame 显示了每行所选列的员工姓名和年龄。

输出

 
      Name     Age
0    Sandy         28
1    Stacey    32
2    Jack    25
3    Stacey    32
4    Stacey    32
5    Stacey    32
6    Jack    40
7    Robin      32