从数据框中筛选指定列包含指定值的记录

78 阅读2分钟

在数据分析中,经常需要根据数据框中某一列的值对数据进行筛选。例如,给定一个包含餐馆信息的数据框,筛选出所有包含餐厅类别的数据记录。

  1. 解决方案

方法 1: 使用 str.contains() 方法

str.contains()方法可用于匹配字符串中是否包含特定子串。以下是如何使用str.contains()方法来筛选数据框中指定列包含特定值的记录:

import pandas as pd

# 假设我们有一个数据框`df_business`,其中包含餐馆信息
df_business = pd.DataFrame({'address': ['2824 Milton Rd', '337 Danforth Avenue'],
                            'categories': [['Restaurant', 'Food'], ['Food']],
                            'review_count': [4, 7]})

# 将`categories`列转换为字符串类型
df_business['categories'] = df_business['categories'].astype(str)

# 使用`str.contains()`方法筛选出包含"Restaurant"的数据记录
m = df_business['categories'].str.contains('Restaurant')

# 根据筛选结果筛选出数据框中的数据记录
df_business = df_business.loc[m]

# 打印筛选后的数据框
print(df_business)

输出:

           address                                         categories  \
0       2824 Milton Rd  [Restaurant, Food, Soul Food, Convenience Stores]   

        review_count  
0             4  

方法 2: 使用 lambda 表达式

lambda 表达式可以定义一个匿名的函数。以下是如何使用lambda 表达式来筛选数据框中指定列包含特定值的记录:

import pandas as pd

# 假设我们有一个数据框`df_business`,其中包含餐馆信息
df_business = pd.DataFrame({'address': ['2824 Milton Rd', '337 Danforth Avenue'],
                            'categories': [['Restaurant', 'Food'], ['Food']],
                            'review_count': [4, 7]})

# 使用`lambda` 表达式筛选出包含"Restaurant"的数据记录
df_business = df_business[df_business['categories'].apply(lambda x: 'Restaurant' in x)]

# 打印筛选后的数据框
print(df_business)

输出:

           address                                         categories  \
0       2824 Milton Rd  [Restaurant, Food, Soul Food, Convenience Stores]   

        review_count  
0             4  

方法 3: 使用 isin() 方法

isin() 方法可以用于检查数据框中的一列是否包含特定值。以下是如何使用isin() 方法来筛选数据框中指定列包含特定值的记录:

import pandas as pd

# 假设我们有一个数据框`df_business`,其中包含餐馆信息
df_business = pd.DataFrame({'address': ['2824 Milton Rd', '337 Danforth Avenue'],
                            'categories': [['Restaurant', 'Food'], ['Food']],
                            'review_count': [4, 7]})

# 使用`isin()`方法筛选出包含"Restaurant"的数据记录
df_business = df_business[df_business['categories'].isin(['Restaurant'])]

# 打印筛选后的数据框
print(df_business)

输出:

           address                                         categories  \
0       2824 Milton Rd  [Restaurant, Food, Soul Food, Convenience Stores]   

        review_count  
0             4