如何使用 pandas 进行数据过滤

如何使用 pandas 进行数据过滤

参考:pandas filter

在数据分析过程中,经常需要对数据进行筛选和过滤,以便专注于分析特定的数据子集。pandas 是一个强大的 Python 数据分析库,它提供了多种方法来过滤 DataFrame 中的数据。本文将详细介绍如何使用 pandas 进行数据过滤,包括使用条件表达式、查询方法和布尔索引等技术。

1. 使用条件表达式过滤数据

在 pandas 中,你可以使用条件表达式来过滤数据。这是最基本也是最直接的过滤数据的方法。

示例代码 1: 使用单个条件过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 过滤出年龄大于30的记录
filtered_df = df[df['Age'] > 30]
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

示例代码 2: 使用多个条件过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 过滤出年龄大于25且名字以'C'开头的记录
filtered_df = df[(df['Age'] > 25) & (df['Name'].str.startswith('C'))]
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

2. 使用 query() 方法过滤数据

query() 方法允许你使用字符串表达式来过滤数据,这使得语法更加简洁易读。

示例代码 3: 使用 query() 方法过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用 query 方法过滤出年龄大于30的记录
filtered_df = df.query('Age > 30')
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

3. 使用布尔索引过滤数据

布尔索引是 pandas 中一种非常灵活的数据过滤方法,它允许你使用布尔向量来过滤数据。

示例代码 4: 使用布尔索引过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 创建一个布尔向量,表示年龄是否大于30
age_filter = df['Age'] > 30

# 使用布尔向量过滤数据
filtered_df = df[age_filter]
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

4. 使用 isin() 方法过滤数据

isin() 方法允许你过滤出列中包含在指定列表中的值的所有记录。

示例代码 5: 使用 isin() 方法过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 过滤出名字在指定列表中的记录
name_filter = df['Name'].isin(['Alice', 'Charlie'])
filtered_df = df[name_filter]
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

5. 使用 filter() 方法过滤数据

filter() 方法提供了一种便捷的方式来过滤 DataFrame 的行或列。

示例代码 6: 使用 filter() 方法过滤列

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 过滤出包含 'Name' 和 'Email' 的列
filtered_df = df.filter(items=['Name', 'Email'])
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

示例代码 7: 使用 filter() 方法过滤行

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 过滤出索引为偶数的行
filtered_df = df.filter(like='0', axis=0)
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

6. 使用 drop() 方法删除数据

虽然 drop() 方法通常用于删除数据,但它也可以间接用于过滤数据,通过删除不需要的部分来保留需要的数据。

示例代码 8: 使用 drop() 方法删除列

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 删除 'Age' 列
filtered_df = df.drop(columns=['Age'])
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

示例代码 9: 使用 drop() 方法删除行

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 删除索引为1的行
filtered_df = df.drop(index=[1])
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

7. 使用 lociloc 进行数据过滤

lociloc 是 pandas 中两个非常强大的数据选择方法,它们不仅可以用于数据选择,还可以用于数据过滤。

示例代码 10: 使用 loc 过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用 loc 过滤出年龄大于30的记录
filtered_df = df.loc[df['Age'] > 30]
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

示例代码 11: 使用 iloc 过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用 iloc 过滤出前两行数据
filtered_df = df.iloc[0:2]
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

8. 使用 where() 方法过滤数据

where() 方法在 pandas 中用于替换不满足条件的行或列,可以用来过滤数据。

示例代码 12: 使用 where() 方法过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用 where 方法过滤出年龄大于30的记录
filtered_df = df.where(df['Age'] > 30)
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

9. 使用 mask() 方法过滤数据

mask() 方法与 where() 方法相反,它用于替换满足条件的行或列,可以用来过滤数据。

示例代码 13: 使用 mask() 方法过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com']}
df = pd.DataFrame(data)

# 使用 mask 方法过滤出年龄不大于30的记录
filtered_df = df.mask(df['Age'] > 30)
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

10. 使用 select_dtypes() 方法过滤数据

select_dtypes() 方法允许你根据数据类型过滤 DataFrame 的列。

示例代码 14: 使用 select_dtypes() 方法过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com'],
        'Salary': [50000, 60000, 70000, 80000]}
df = pd.DataFrame(data)

# 过滤出数值类型的列
filtered_df = df.select_dtypes(include=[np.number])
print(filtered_df)

11. 使用 eval() 方法过滤数据

eval() 方法在 pandas 中用于高效地评估字符串表达式,这些表达式涉及 DataFrame 中的列。

示例代码 15: 使用 eval() 方法过滤数据

import pandas as pd

# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'Email': ['alice@pandasdataframe.com', 'bob@pandasdataframe.com', 'charlie@pandasdataframe.com', 'david@pandasdataframe.com'],
        'Salary': [50000, 60000, 70000, 80000]}
df = pd.DataFrame(data)

# 使用 eval 方法过滤出年龄大于30且薪水大于60000的记录
filtered_df = df.eval('Age > 30 and Salary > 60000')
print(filtered_df)

Output:

如何使用 pandas 进行数据过滤

总结

在本文中,我们详细介绍了使用 pandas 进行数据过滤的多种方法,包括使用条件表达式、query() 方法、布尔索引、isin() 方法、filter() 方法、drop() 方法、lociloc 方法、where() 方法、mask() 方法、select_dtypes() 方法和 eval() 方法。通过这些方法,你可以灵活地选择和过滤 DataFrame 中的数据,以便进行进一步的数据分析和处理。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程