pandas dataframe 根据列值进行过滤

pandas dataframe 根据列值进行过滤

参考:pandas dataframe filter by column value

在数据分析过程中,我们经常需要根据某些条件来过滤数据,以便对特定的数据子集进行进一步的分析和处理。在pandas库中,我们可以使用多种方法来实现这一目标。本文将详细介绍如何使用pandas dataframe根据列值进行过滤。

1. 使用布尔索引进行过滤

布尔索引是一种非常强大的数据过滤方式。它允许我们根据一系列布尔值(True或False)来选择数据。在pandas中,我们可以使用布尔索引来过滤dataframe。

示例代码1:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'city': ['New York', 'Los Angeles', 'London', 'Shanghai', 'Sydney']
})

# 过滤出年龄大于30的人
df_filtered = df[df['age'] > 30]

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,df['age'] > 30会返回一个布尔序列,其中年龄大于30的行为True,其余为False。然后,我们可以使用这个布尔序列来过滤dataframe。

2. 使用query方法进行过滤

除了使用布尔索引,我们还可以使用query方法来过滤dataframe。query方法允许我们使用字符串表达式来定义过滤条件。

示例代码2:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'city': ['New York', 'Los Angeles', 'London', 'Shanghai', 'Sydney']
})

# 过滤出年龄大于30的人
df_filtered = df.query('age > 30')

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们使用字符串'age > 30'来定义过滤条件。query方法会自动解析这个字符串,并返回满足条件的行。

3. 使用lociloc进行过滤

lociloc是pandas中的两个重要的索引器,它们可以用来选择dataframe的特定行和列。我们可以结合布尔索引,使用lociloc来过滤dataframe。

示例代码3:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'city': ['New York', 'Los Angeles', 'London', 'Shanghai', 'Sydney']
})

# 过滤出年龄大于30的人
df_filtered = df.loc[df['age'] > 30]

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们使用loc和布尔索引来过滤dataframe。loc会返回所有满足布尔索引条件的行。

4. 使用isin方法进行过滤

isin方法可以用来检查dataframe的某一列是否包含在给定的值列表中。我们可以使用isin方法来过滤dataframe。

示例代码4:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'city': ['New York', 'Los Angeles', 'London', 'Shanghai', 'Sydney']
})

# 过滤出居住在New York和London的人
cities = ['New York', 'London']
df_filtered = df[df['city'].isin(cities)]

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们创建了一个包含’New York’和’London’的列表,然后使用isin方法来过滤dataframe。

5. 使用str方法进行过滤

在处理字符串列时,我们可以使用str方法来进行过滤。str方法提供了一系列字符串处理函数,如containsstartswithendswith等。

示例代码5:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com', 'eve@pandasdataframe.com']
})

# 过滤出邮箱以'pandasdataframe.com'结尾的人
df_filtered = df[df['email'].str.endswith('pandasdataframe.com')]

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们使用str.endswith方法来过滤dataframe。这个方法会返回一个布尔序列,其中邮箱以’pandasdataframe.com’结尾的行为True,其余为False。

6. 使用多个条件进行过滤

在实际应用中,我们经常需要根据多个条件来过滤dataframe。在pandas中,我们可以使用&(和)、|(或)和~(非)操作符来组合多个条件。

示例代码6:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'city': ['New York', 'Los Angeles', 'London', 'Shanghai', 'Sydney']
})

# 过滤出年龄大于30并且居住在London的人
df_filtered = df[(df['age'] > 30) & (df['city'] == 'London')]

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们使用&操作符来组合两个条件:’age > 30’和’city London’。

7. 使用between方法进行过滤

between方法可以用来检查dataframe的某一列的值是否在给定的范围内。我们可以使用between方法来过滤dataframe。

示例代码7:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'city': ['New York', 'Los Angeles', 'London', 'Shanghai', 'Sydney']
})

# 过滤出年龄在30到40之间的人
df_filtered = df[df['age'].between(30, 40)]

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们使用between方法来过滤dataframe。这个方法会返回一个布尔序列,其中年龄在30到40之间的行为True,其余为False。

8. 使用filter方法进行过滤

filter方法可以用来选择dataframe的列。虽然它通常用于选择列,但我们也可以通过一些技巧来实现基于值的过滤。

示例代码8:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com', 'eve@pandasdataframe.com']
})

# 过滤出包含'email'列的dataframe,并且'email'列的值包含'pandasdataframe.com'
df_filtered = df.loc[df['email'].str.contains('pandasdataframe.com'), df.filter(like='email').columns]

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们首先使用str.contains方法来创建一个布尔索引,然后使用filter方法来选择包含’email’的列。

9. 使用drop方法删除不需要的行

有时候,过滤数据不仅仅是选择满足条件的行,也可能涉及到删除不满足条件的行。drop方法可以用来删除dataframe中的行或列。

示例代码9:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'city': ['New York', 'Los Angeles', 'London', 'Shanghai', 'Sydney']
})

# 删除年龄小于30的行
df_filtered = df.drop(df[df['age'] < 30].index)

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们首先找到年龄小于30的行的索引,然后使用drop方法来删除这些行。

10. 使用select_dtypes方法进行过滤

在处理包含多种数据类型的dataframe时,我们可能只对某些特定数据类型的列感兴趣。select_dtypes方法可以用来选择dataframe中特定数据类型的列。

示例代码10:

import pandas as pd

# 创建一个dataframe
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 31, 35, 19, 45],
    'salary': [50000, 60000, 70000, 40000, 80000]
})

# 选择数值类型的列
df_filtered = df.select_dtypes(include=[int, float])

print(df_filtered)

Output:

pandas dataframe 根据列值进行过滤

在上面的示例中,我们使用select_dtypes方法来选择dataframe中的数值类型列。

结论

在本文中,我们详细介绍了使用pandas dataframe根据列值进行过滤的多种方法。这些方法包括使用布尔索引、query方法、lociloc索引器、isin方法、str方法、多条件过滤、between方法、filter方法、drop方法和select_dtypes方法。通过这些方法,我们可以灵活地选择和过滤数据,以满足不同的数据分析需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程