Python Pandas 过滤

数据过滤是数据分析中的一项常见操作。Pandas 允许我们根据不同的条件过滤数据。

我们主要可以通过两种方式在 Pandas 中过滤数据

  • 按列名(标签)
  • 按实际数据(值)

按标签过滤数据

我们可以使用 `filter()` 函数按名称或标签选择列。让我们看一个例子。

import pandas as pd

# create a DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
        'Salary': [50000, 60000, 55000, 70000]}

df = pd.DataFrame(data)

# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")

# use the filter() method to select columns based on a condition filtered_df = df.filter(items=['Name', 'Salary'])
# display the filtered DataFrame print("Filtered DataFrame:") print(filtered_df)

输出

Original DataFrame:
      Name Department  Salary
0    Alice         HR   50000
1      Bob  Marketing   60000
2  Charlie  Marketing   55000
3    David         IT   70000


Filtered DataFrame:
      Name  Salary
0    Alice   50000
1      Bob   60000
2  Charlie   55000
3    David   70000

在此示例中,我们使用 `filter()` 通过列名选择了 `Name` 和 `Salary` 列。

要了解更多信息,请访问 Pandas filter()


按值过滤数据

我们还可以按值过滤数据。按值过滤数据的几种常见方法是

  • 使用逻辑运算符
  • `isin()` 方法
  • `str` 访问器
  • `query()` 方法

逻辑运算符

您可以使用逻辑运算符根据列值过滤行。例如,

import pandas as pd

# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
        'Salary': [50000, 60000, 55000, 70000]}

df = pd.DataFrame(data)

# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")

# use logical operators to filter filtered_df = df[df.Salary > 55000]
# display the filtered DataFrame print("Filtered DataFrame:") print(filtered_df)

输出

Original DataFrame:
      Name Department  Salary
0    Alice         HR   50000
1      Bob  Marketing   60000
2  Charlie  Marketing   55000
3    David         IT   70000


Filtered DataFrame:
    Name Department  Salary
1    Bob  Marketing   60000
3  David         IT   70000

在上面的示例中,我们使用逻辑运算符 `>` 根据条件 `Salary > 55000` 选择了行。


`isin()` 方法

`isin()` 方法提供了使用列值过滤数据的另一种方法。让我们看一个例子。

import pandas as pd

# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
        'Salary': [50000, 60000, 55000, 70000]}

df = pd.DataFrame(data)

# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")

# use isin() method departments = ['HR', 'IT'] filtered_df = df[df.Department.isin(departments)]
# display the filtered DataFrame print("Filtered DataFrame:") print(filtered_df)

输出

Original DataFrame:
      Name Department  Salary
0    Alice         HR   50000
1      Bob  Marketing   60000
2  Charlie  Marketing   55000
3    David         IT   70000


Filtered DataFrame:
    Name Department  Salary
0  Alice         HR   50000
3  David         IT   70000

在此示例中,我们选择了 `Department` 值存在于 `departments` 列表中的那些行。


`str` 访问器

我们可以使用 `str` 访问器根据字符串值有效地过滤行。让我们看一个例子。

import pandas as pd

# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
        'Salary': [50000, 60000, 55000, 70000]}

df = pd.DataFrame(data)

# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")

# use str accessor filtered_df = df[df.Department.str.contains('Market')]
# display the filtered DataFrame print("Filtered DataFrame:") print(filtered_df)

输出

Original DataFrame:
      Name Department  Salary
0    Alice         HR   50000
1      Bob  Marketing   60000
2  Charlie  Marketing   55000
3    David         IT   70000

Filtered DataFrame:
      Name Department  Salary
1      Bob  Marketing   60000
2  Charlie  Marketing   55000

这里,我们根据字符串值过滤了行。我们只选择了 `Department` 值包含字符串 `Market` 的行。


`query()` 方法

这是根据列值过滤数据帧的最灵活的方法。

包含过滤条件的查询可以作为字符串传递给 `query()` 方法。

让我们看一个例子。

import pandas as pd

# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
        'Salary': [50000, 60000, 55000, 70000]}

df = pd.DataFrame(data)

# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")

# use query method filtered_df = df.query('Salary > 55000 and Department == "Marketing"')
# display the filtered DataFrame print("Filtered DataFrame:") print(filtered_df)

输出

Original DataFrame:
      Name Department  Salary
0    Alice         HR   50000
1      Bob  Marketing   60000
2  Charlie  Marketing   55000
3    David         IT   70000


Filtered DataFrame:
  Name Department  Salary
1  Bob  Marketing   60000

在此示例中,我们使用 `query()` 方法选择了 `Salary > 55000` 和 `Department == "Marketing"` 的行。


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

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

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