如何使用 pandas 的 loc 方法结合两个条件来筛选数据

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

参考:pandas dataframe loc 2 conditions

在数据分析中,经常需要根据多个条件筛选数据。Pandas 是 Python 数据分析的重要工具,其 DataFrame 提供了强大的数据操作能力。本文将详细介绍如何使用 pandas 的 loc 方法结合两个条件来筛选数据。

1. 理解 loc 方法

在 pandas 中,loc 方法用于按标签索引数据。其基本语法是 df.loc[行标签, 列标签]。当我们需要根据条件筛选数据时,可以将条件表达式放在行标签的位置。

2. 基本示例

首先,我们创建一个简单的 DataFrame 来演示如何使用 loc 方法。

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)
print(df)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

示例代码 1:单条件筛选

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选年龄大于 25 的记录
result = df.loc[df['Age'] > 25]
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

示例代码 2:两个条件的筛选

接下来,我们将根据两个条件筛选数据。我们可以使用 &(与)和 |(或)来组合条件。

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选年龄大于 25 并且城市为 Los Angeles 的记录
result = df.loc[(df['Age'] > 25) & (df['City'] == 'Los Angeles')]
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

3. 使用字符串条件

在处理包含字符串的数据时,我们同样可以使用 loc 来筛选满足特定条件的记录。

示例代码 3:字符串条件筛选

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选城市名为 New York 的记录
result = df.loc[df['City'] == 'New York']
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

示例代码 4:结合字符串和数值条件

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选城市名为 New York 且年龄大于 23 的记录
result = df.loc[(df['City'] == 'New York') & (df['Age'] > 23)]
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

4. 复杂条件的筛选

我们可以根据需要组合多个条件,使用 loc 进行更复杂的数据筛选。

示例代码 5:多条件组合

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选年龄大于 25 或者城市为 Chicago 的记录
result = df.loc[(df['Age'] > 25) | (df['City'] == 'Chicago')]
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

示例代码 6:使用 isin 方法进行筛选

isin 方法可以用来检查某列的值是否存在于我们提供的列表中。

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选城市名在指定列表中的记录
result = df.loc[df['City'].isin(['Chicago', 'Los Angeles'])]
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

5. 使用 loc 修改数据

loc 不仅可以用来筛选数据,还可以用来修改数据。我们可以指定条件和列名来更新满足条件的记录。

示例代码 7:修改满足条件的记录

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 将所有年龄大于 30 的人的城市改为 'San Francisco'
df.loc[df['Age'] > 30, 'City'] = 'San Francisco'
print(df)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

6. 结合函数使用

我们可以结合使用 Python 的函数来创建更复杂的筛选条件。

示例代码 8:使用自定义函数进行筛选

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 定义一个函数,检查名字是否以 A 开头
def starts_with_A(name):
    return name.startswith('A')

# 使用自定义函数进行筛选
result = df.loc[df['Name'].apply(starts_with_A)]
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

7. 错误处理

在使用 loc 进行数据筛选时,我们需要注意可能会遇到的错误,例如键错误(KeyError)和条件错误。

示例代码 9:处理 KeyError

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 尝试访问不存在的列
try:
    result = df.loc[df['NonexistentColumn'] > 0]
    print(result)
except KeyError as e:
    print(f"Error: {e}")

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

示例代码 10:处理条件错误

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 使用不正确的条件表达式
try:
    result = df.loc[df['Age'] > 'twenty']
    print(result)
except TypeError as e:
    print(f"Error: {e}")

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

8. 性能优化

在处理大规模数据时,性能成为一个重要考虑因素。使用 loc 时,我们应该尽可能地优化条件表达式,避免不必要的计算。

示例代码 11:优化条件表达式

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 使用更有效的条件表达式
result = df.loc[(df['Age'] > 25) & df['City'].isin(['New York', 'Los Angeles'])]
print(result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

9. 结合其他 pandas 功能

loc 可以与 pandas 的其他功能如 groupby, sort_values 等结合使用,以实现更复杂的数据分析任务。

示例代码 12:结合 groupby 使用

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选年龄大于 25 的记录,并按城市分组
grouped = df.loc[df['Age'] > 25].groupby('City')
print(grouped)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

示例代码 13:结合 sort_values 使用

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'City': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# 筛选年龄大于 25 的记录,并按年龄排序
sorted_result = df.loc[df['Age'] > 25].sort_values(by='Age')
print(sorted_result)

Output:

如何使用 pandas 的 loc 方法结合两个条件来筛选数据

10. 总结

在本文中,我们详细介绍了如何使用 pandas 的 loc 方法结合两个条件来筛选数据。我们提供了多个示例代码,展示了如何使用 loc 进行数据筛选、修改以及与其他功能的结合使用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程