如何使用 pandas dataframe 的.loc属性来进行多条件筛选

如何使用 pandas dataframe 的.loc属性来进行多条件筛选

参考:pandas dataframe loc with multiple conditions

在数据分析中,我们经常需要根据某些条件来筛选数据。Pandas 提供了一个非常强大的功能,那就是 .loc 属性,它可以让我们根据多个条件来选择数据。本文将详细介绍如何使用 pandas dataframe 的 .loc 属性来进行多条件筛选。

1. 基本使用

在开始之前,我们首先需要了解 .loc 属性的基本使用方法。.loc 是基于标签的数据选择方法,它可以接受的输入有:

  • 单个标签。例如:5 或 ‘a’,这将会选择与指定标签相关的行或列。
  • 标签列表。例如:[‘a’, ‘b’, ‘c’]。
  • 切片对象。例如:’a’:’f’,注意,与 Python 切片不同,这里的切片包含末端。
  • 布尔数组。
  • 可返回标签的函数或参数。

下面我们创建一个简单的 dataframe 来演示:

import pandas as pd

data = {
    'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
    'age': [20, 21, 19, 20, 18],
    'score': [90, 85, 88, 92, 78]
}
df = pd.DataFrame(data)

print(df)

Output:

如何使用 pandas dataframe 的.loc属性来进行多条件筛选

我们可以使用 .loc 属性来选择所有名字为 ‘Tom’ 的行:

import pandas as pd

data = {
    'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
    'age': [20, 21, 19, 20, 18],
    'score': [90, 85, 88, 92, 78]
}
df = pd.DataFrame(data)

df.loc[df['name'] == 'Tom']
print(df)

Output:

如何使用 pandas dataframe 的.loc属性来进行多条件筛选

2. 多条件筛选

.loc 属性可以接受多个条件,这使得我们可以根据多个条件来筛选数据。例如,我们可以选择所有名字为 ‘Tom’ 并且年龄为 20 的行:

import pandas as pd

data = {
    'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
    'age': [20, 21, 19, 20, 18],
    'score': [90, 85, 88, 92, 78]
}
df = pd.DataFrame(data)

print(df.loc[(df['name'] == 'Tom') & (df['age'] == 20)])

Output:

如何使用 pandas dataframe 的.loc属性来进行多条件筛选

注意,每个条件都需要用括号括起来,条件之间使用 &(和)或 |(或)连接。

我们也可以使用 ~ 来表示“非”,例如,选择所有名字不为 ‘Tom’ 的行:

import pandas as pd

data = {
    'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
    'age': [20, 21, 19, 20, 18],
    'score': [90, 85, 88, 92, 78]
}
df = pd.DataFrame(data)

print(df.loc[~(df['name'] == 'Tom')])

Output:

如何使用 pandas dataframe 的.loc属性来进行多条件筛选

3. 使用函数进行筛选

.loc 属性还可以接受一个函数,这使得我们可以使用复杂的逻辑来筛选数据。例如,我们可以选择所有分数在平均分以上的行:

df.loc[df['score'] > df['score'].mean()]

我们也可以定义一个函数,然后将这个函数作为条件传给 .loc 属性。例如,我们可以定义一个函数来选择所有名字包含 ‘pandasdataframe.com’ 的行:

import pandas as pd

data = {
    'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
    'age': [20, 21, 19, 20, 18],
    'score': [90, 85, 88, 92, 78]
}
df = pd.DataFrame(data)

def contains_pandasdataframe_com(name):
    return 'pandasdataframe.com' in name

print(df.loc[df['name'].apply(contains_pandasdataframe_com)])

Output:

如何使用 pandas dataframe 的.loc属性来进行多条件筛选

4. 使用 .loc 属性修改数据

.loc 属性不仅可以用来选择数据,还可以用来修改数据。例如,我们可以将所有名字为 ‘Tom’ 的行的分数改为 100:

import pandas as pd

data = {
    'name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
    'age': [20, 21, 19, 20, 18],
    'score': [90, 85, 88, 92, 78]
}
df = pd.DataFrame(data)

print(df.loc[df['name'] == 'Tom', 'score'] = 100)

注意,这里我们使用了 .loc 属性的另一种形式:df.loc[row_indexer, column_indexer]。这种形式可以让我们同时指定行和列。

5. 总结

Pandas 的 .loc 属性是一个非常强大的工具,它可以让我们根据多个条件来选择和修改数据。在实际的数据分析工作中,我们经常需要根据复杂的条件来筛选数据,.loc 属性可以让这个过程变得非常简单和直观。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程