Pandas 选择

Pandas 选择是指从 DataFrame 中提取特定数据片段的过程。

数据选择涉及根据标签、位置或条件选择特定的行和列。

Pandas 提供了多种方法,例如基本索引、切片、布尔索引和查询,可以高效地提取、过滤和转换数据,使用户能够专注于相关信息以进行分析和决策。


使用索引和切片选择数据

在 Pandas 中,我们可以使用方括号及其标签或位置来选择所需数据。

让我们看一个例子。

import pandas as pd

# create a DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [25, 30, 22, 27, 29],
    'Salary': [50000, 60000, 45000, 55000, 52000]
}

df = pd.DataFrame(data)

# selecting a single column name_column = df['Name']
print("Selecting single column: Name") print(name_column) print()
# selecting multiple columns age_salary_columns = df[['Age', 'Salary']]
print("Selecting multiple columns: Age and Salary") print(age_salary_columns.to_string(index=False)) print()
# selecting rows using slicing selected_rows = df[1:4]
print("Selecting rows 1 to 3") print(selected_rows.to_string(index=False)) print()

输出

Selecting single column: Name
0      Alice
1        Bob
2    Charlie
3      David
4        Eve
Name: Name, dtype: object

Selecting multiple columns: Age and Salary
Age  Salary
25   50000
30   60000
22   45000
27   55000
29   52000

Selecting rows 1 to 3
Name      Age  Salary
Bob        30    60000
Charlie    22    45000
David      27    55000

在上面的示例中,我们创建了一个名为 df 的 DataFrame,它使用包含三列的字典数据:NameAgeSalary。每一列都由一个值列表表示。

然后我们,

  1. 使用 df['Name'] 选择单列 Name
  2. 使用 df[['Age', 'Salary']] 选择多列 AgeSalary
  3. 使用切片 df[1:4] 选择从 **1** 到 **3** 的行

注意.to_string(index=False) 用于显示不带索引的值。


使用 loc 和 iloc 选择数据

Pandas 中的 lociloc 方法用于通过标签或整数索引访问数据。

  1. loc 选择具有特定标签的行和列
  2. iloc 选择特定索引的行和列

我们来看一个例子。

import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
    'Age': [25, 30, 22, 27, 29],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'San Francisco']
}

df = pd.DataFrame(data)
print(f"Original DataFrame \n {df} \n") 

# loc to select rows and columns by labels # select rows 1 to 3 and columns Name and Age selected_data_loc = df.loc[1:3, ['Name', 'Age']]
print(selected_data_loc.to_string(index = False)) print()
# iloc to select rows and columns by index # select rows 1 to 3 and columns 0 and 2 selected_data_iloc = df.iloc[1:4, [0, 2]]
print(selected_data_iloc.to_string(index = False))

输出

Original DataFrame 
       Name  Age           City
0    Alice   25       New York
1      Bob   30    Los Angeles
2  Charlie   22        Chicago
3    David   27        Houston
4    Emily   29  San Francisco 

Name     Age
Bob       30
Charlie   22
David     27

Name        City
Bob      Los Angeles
Charlie  Chicago
David    Houston

这里,

  • 使用 df.loc[1:3, ['Name', 'Age']] - 从 df 中选择行 **1** 到 **3** 以及列 NameAge
  • 使用 df.iloc[1:4, [0, 2]] - 从 df 中选择行 **1** 到 **3** 以及索引位置为 **0** 和 **2** 的列

根据特定条件选择行

在 Pandas 中,我们可以使用布尔条件根据特定标准过滤行。例如,

import pandas as pd

# creating a DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
    'Age': [25, 30, 22, 28, 24],
    'Gender': ['Female', 'Male', 'Male', 'Male', 'Female']
}

df = pd.DataFrame(data)

# select rows where Age is greater than 25
selected_rows = df[df['Age'] > 25]

print(selected_rows)

输出

     Name  Age Gender
1    Bob   30   Male
3  David   28   Male

在此示例中,我们选择了年龄大于 **25** 的行。

布尔索引是通过条件完成的

df['Age'] > 25

这将创建一个布尔掩码。当将此掩码应用于 DataFrame 时,它只选择条件为 True 的行。


使用 query() 选择数据

Pandas 中的 query() 方法允许您使用更类似 SQL 的语法来选择数据。

我们来看一个例子。

import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 30, 22, 28, 35],
    'Score': [85, 90, 75, 80, 95]
}

df = pd.DataFrame(data)

# select the rows where the age is greater than 25 selected_rows = df.query('Age > 25')
print(selected_rows.to_string(index = False))

输出


Name  Age  Score
Bob    30     90
David  28     80
Eva    35     95

在此示例中,查询 Age > 25 选择 Age 列值大于 **25** 的行。


根据值列表选择行

Pandas 为我们提供了名为 isin() 的方法,可以根据值列表过滤行。例如,

import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
    'Age': [25, 30, 22, 28, 24]
}

df = pd.DataFrame(data)

# create a list of names to select
names_to_filter = ['Bob', 'David']

# use isin() to select rows based on the 'Name' column selected_rows = df[df['Name'].isin(names_to_filter)]
print(selected_rows.to_string(index = False))

输出

Name  Age
Bob   30
David 28

在此示例中,我们只想选择姓名是 BobDavid 的行。

我们创建了一个名为 names_to_filter 的列表,其中包含我们要过滤的姓名,然后使用 isin() 方法根据 Name 列中的值过滤行。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战