Python Pandas – 从数据框中选择子集行

Python Pandas – 从数据框中选择子集行

Python 的 Pandas 库中,有时需要在一个数据框中选择子集行。这个功能是非常有用的,我们可以根据数据的筛选条件来选择需要的数据行,然后再进行进一步的分析和处理。在本文中,我们将介绍几种方法来从 Pandas 的数据框中选择子集行。

目录

  1. Pandas 数据框
  2. Pandas 行选择
  3. Pandas 行过滤
  4. Pandas 条件过滤
  5. Pandas 逻辑运算
  6. Pandas 多重条件
  7. Pandas 模糊匹配
  8. Pandas 列之间的比较
  9. Pandas isin() 方法
  10. Pandas loc 和 iloc 方法
  11. Pandas query 方法
  12. Pandas head 和 tail 方法
  13. Pandas sample 方法
  14. Pandas 小结

1. Pandas 数据框

在 Pandas 中,数据框是用于表示表格数据的主要数据结构。它可以理解为一个二维的表格,其中每一行代表一个样本,每一列代表一个变量。在一个数据框中,每个列可以是不同的数据类型(整型、浮点型、字符串等)。

下面是创建一个 Pandas 数据框的示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})
print(df)

输出结果为:

   name  age gender
0  John   25      M
1   Sam   30      M
2   Ann   35      F
3  Mary   40      F

2. Pandas 行选择

在 Pandas 中,我们可以使用 square brackets(中括号)来选择数据框中的行。一个简单的例子如下:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 选择第一行
row = df.iloc[0]
print(row)

输出结果为:

name      John
age         25
gender       M
Name: 0, dtype: object

在上面的例子中,我们使用了 iloc 方法选择了第一行。iloc 方法是选择行的位置的整数索引。

3. Pandas 行过滤

Pandas 还可以根据数据的筛选条件来选择需要的数据行。这个功能称为行过滤。我们可以使用 square brackets(中括号)和布尔表达式来过滤数据框中的行。

下面是一个简单的例子:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 根据年龄过滤数据
filtered_data = df[df['age'] > 30]
print(filtered_data)

输出结果为:

   name  age gender
2   Ann   35      F
3  Mary   40      F

在上面的例子中,我们使用了 square brackets(中括号)和布尔表达式来过滤数据。布尔表达式 df['age'] > 30 返回了一个布尔数组,标记了数据框中哪些行的年龄大于 30。然后,我们将这个布尔数组传递给 square brackets(中括号)来选择符合条件的行。

4. Pandas 条件过滤

除了采用布尔表达式来过滤行之外,Pandas 还提供了一些其他方法,可以根据条件来过滤数据。

下面是一个简单的例子,我们将使用 Pandas 中的 query() 方法来过滤数据:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 使用 query() 方法来过滤数据
filtered_data = df.query('age > 30')
print(filtered_data)

输出结果为:

   name  age gender
2   Ann   35      F
3  Mary   40      F

在上面的例子中,我们使用了 Pandas 中的 query() 方法来过滤数据,query('age > 30') 表示选择年龄大于 30 的行。

5. Pandas 逻辑运算

在 Pandas 中,我们可以使用逻辑运算符 and、or 和 not 来连接多个条件。这个功能是非常有用的,可以帮助我们根据多个条件来筛选数据。

下面是一个简单的例子,我们将使用逻辑运算符筛选数据:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 使用逻辑运算符来选择数据
filtered_data = df[(df['age'] > 30) & (df['gender'] == 'F')]
print(filtered_data)

输出结果为:

   name  age gender
2   Ann   35      F
3  Mary   40      F

在上面的例子中,我们使用了逻辑运算符 and 来连接两个条件,选择年龄大于 30 且性别为女性的行。

6. Pandas 多重条件

在 Pandas 中,我们可以使用多重条件来筛选数据。多重条件是通过括号来分组的。下面是一个示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 使用多重条件过滤数据
filtered_data = df[(df['age'] >= 30) & ((df['gender'] == 'F') | (df['name'] == 'Sam'))]
print(filtered_data)

输出结果为:

   name  age gender
1   Sam   30      M
2   Ann   35      F
3  Mary   40      F

在上面的例子中,我们使用了多重条件来过滤数据。我们使用括号将两个条件分组,然后使用逻辑运算符 & 和 | 来连接条件。

7. Pandas 模糊匹配

在 Pandas 中,我们可以使用 str.contains() 方法来进行模糊匹配。这个方法可以用来查找包含特定字符串的行。

下面是一个示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'country': ['USA', 'China', 'China', 'USA']})

# 使用模糊匹配过滤数据
filtered_data = df[df['country'].str.contains('China')]
print(filtered_data)

输出结果为:

  name  age country
1  Sam   30   China
2  Ann   35   China

在上面的例子中,我们使用了 str.contains() 方法来进行模糊匹配,选择国家是中国的行。

8. Pandas 列之间的比较

在 Pandas 中,我们可以对数据框中的列进行比较操作。这个功能是非常有用的,可以根据不同的列之间的关系来筛选数据。

下面是一个示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'salary': [50000, 60000, 70000, 80000]})

# 比较两个列的值
filtered_data = df[df['age'] > df['salary']/1000]
print(filtered_data)

输出结果为:

   name  age  salary
0  John   25   50000
1   Sam   30   60000

在上面的例子中,我们使用了两个列的值来进行比较操作,选择年龄大于薪水除以 1000 的行。

9. Pandas isin() 方法

在 Pandas 中,我们可以使用 isin() 方法来过滤数据,这个方法用来选择列中值包含于给定集合的行。

下面是一个示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 使用 isin() 方法过滤数据
filtered_data = df[df['name'].isin(['Sam', 'Mary'])]
print(filtered_data)

输出结果为:

   name  age gender
1   Sam   30      M
3  Mary   40      F

在上面的例子中,我们使用了 isin() 方法来过滤数据,选择名字为 Sam 或者 Mary 的行。

10. Pandas loc 和 iloc 方法

在 Pandas 中,我们可以使用 loc 方法和 iloc 方法来选择数据框中的行和列。

loc 方法使用标签索引来选择数据,而 iloc 方法使用整数索引来选择数据。

下面是一个示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 使用 loc 方法选择行
filtered_data = df.loc[df['age'] > 30, ['name', 'gender']]
print(filtered_data)

输出结果为:

   name gender
2   Ann      F
3  Mary      F

在上面的例子中,我们使用了 loc 方法来选择数据,选择年龄大于 30 的行,并且只选择名字和性别这两列。

11. Pandas query 方法

除了使用 [] 运算符之外,我们还可以使用 query() 方法来选择行。 query() 方法提供了一种更简单的方式来选择数据。

下面是一个示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
                   'age': [25, 30, 35, 40],
                   'gender': ['M', 'M', 'F', 'F']})

# 使用 query() 方法选择行
filtered_data = df.query('age > 30')[['name', 'gender']]
print(filtered_data)

输出结果为:

   name gender
2   Ann      F
3  Mary      F

在上面的例子中,我们使用了 query() 方法来选择数据,选择年龄大于 30 的行,并且只选择名字和性别这两列。

12. Pandas head 和 tail 方法

在 Pandas 中,我们可以使用 head 和 tail 方法来获取数据框的前几行或者后几行数据。

下面是一个示例代码:

import pandas as pd

# 创建一个数据框
df = pd.DataFrame({'name': ['John','Sam', 'Ann', 'Mary', 'Tom', 'Jack'],
                   'age': [25, 30, 35, 40, 45, 50],
                   'gender': ['M', 'M', 'F', 'F', 'M', 'M']})

# 获取前三行
print(df.head(3))

# 获取后两行
print(df.tail(2))

输出结果为:

   name  age gender
0  John   25      M
1   Sam   30      M
2   Ann   35      F
      name  age gender
4      Tom   45      M
5     Jack   50      M

在上面的例子中,我们使用了 head 和 tail 方法来获取数据框的前三行和后两行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程