如何使用 Pandas 进行数据过滤
在数据分析过程中,经常需要对数据进行筛选和过滤,以便专注于分析特定的数据子集。Pandas 是一个强大的 Python 数据分析工具库,它提供了多种方法来过滤 DataFrame 中的数据。本文将详细介绍如何使用 Pandas 进行数据过滤,包括使用条件表达式、query 方法以及通过布尔索引等方式。
1. 使用条件表达式过滤数据
在 Pandas 中,可以直接使用条件表达式来过滤 DataFrame 中的数据。这是最直接也是最常用的数据过滤方法。
示例代码 1: 基于单个条件过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 过滤出 website 列为 'pandasdataframe.com' 的行
filtered_df = df[df['website'] == 'pandasdataframe.com']
print(filtered_df)
Output:
示例代码 2: 基于多个条件过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 过滤出 age 大于 30 并且 website 为 'pandasdataframe.com' 的行
filtered_df = df[(df['age'] > 30) & (df['website'] == 'pandasdataframe.com')]
print(filtered_df)
Output:
2. 使用 query
方法过滤数据
Pandas 的 query
方法提供了一种更为简洁的方式来过滤 DataFrame。使用字符串表达式可以使代码更加易读。
示例代码 3: 使用 query 方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 query 方法过滤数据
filtered_df = df.query("website == 'pandasdataframe.com'")
print(filtered_df)
Output:
示例代码 4: 使用 query 方法结合多个条件过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 query 方法结合多个条件过滤数据
filtered_df = df.query("age > 30 and website == 'pandasdataframe.com'")
print(filtered_df)
Output:
3. 使用布尔索引过滤数据
布尔索引是 Pandas 中一种非常灵活的数据过滤方式。通过对 DataFrame 的列进行操作,生成布尔值序列,然后用这个布尔值序列来过滤数据。
示例代码 5: 使用布尔索引过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 生成布尔值序列
condition = df['website'] == 'pandasdataframe.com'
# 使用布尔索引过滤数据
filtered_df = df[condition]
print(filtered_df)
Output:
示例代码 6: 结合多个布尔序列过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 生成多个布尔值序列
condition1 = df['age'] > 30
condition2 = df['website'] == 'pandasdataframe.com'
# 结合多个布尔序列过滤数据
filtered_df = df[condition1 & condition2]
print(filtered_df)
Output:
4. 使用 isin
方法过滤数据
isin
方法可以用来过滤 DataFrame 中某列的值是否存在于一个指定的集合中。这在处理分类数据时非常有用。
示例代码 7: 使用 isin 方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 isin 方法过滤数据
filtered_df = df[df['website'].isin(['pandasdataframe.com', 'example.com'])]
print(filtered_df)
Output:
示例代码 8: 结合条件表达式和 isin 方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 结合条件表达式和 isin 方法过滤数据
filtered_df = df[df['age'].isin([30, 40]) & (df['website'] == 'pandasdataframe.com')]
print(filtered_df)
Output:
5. 使用 filter
方法过滤数据
Pandas 的 filter
方法提供了一种便捷的方式来过滤 DataFrame 的行或列。可以根据标签的名称来过滤。
示例代码 9: 使用 filter 方法过滤列
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 filter 方法过滤列
filtered_df = df.filter(items=['name', 'website'])
print(filtered_df)
Output:
示例代码 10: 使用 filter 方法过滤行
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 filter 方法过滤行
filtered_df = df.filter(like='3', axis=0)
print(filtered_df)
Output:
示例代码 11: 使用 filter 方法过滤列,使用正则表达式
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 filter 方法过滤列,使用正则表达式
filtered_df = df.filter(regex='^n', axis=1)
print(filtered_df)
Output:
示例代码 12: 使用 filter 方法过滤行,使用正则表达式
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 filter 方法过滤行,使用正则表达式
filtered_df = df.filter(regex='^1', axis=0)
print(filtered_df)
Output:
示例代码 13: 使用 loc
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 loc 方法过滤数据
filtered_df = df.loc[df['website'] == 'pandasdataframe.com']
print(filtered_df)
Output:
示例代码 14: 使用 iloc
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 iloc 方法过滤数据
filtered_df = df.iloc[0:2]
print(filtered_df)
Output:
示例代码 15: 使用 at
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 at 方法过滤数据
filtered_data = df.at[0, 'website']
print(filtered_data)
Output:
示例代码 16: 使用 iat
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 iat 方法过滤数据
filtered_data = df.iat[0, 2]
print(filtered_data)
Output:
示例代码 17: 使用 where
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 where 方法过滤数据
filtered_df = df.where(df['website'] == 'pandasdataframe.com')
print(filtered_df)
Output:
示例代码 18: 使用 mask
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 mask 方法过滤数据
filtered_df = df.mask(df['website'] == 'pandasdataframe.com')
print(filtered_df)
Output:
示例代码 19: 使用 eval
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 eval 方法过滤数据
filtered_df = df[df.eval("website == 'pandasdataframe.com'")]
print(filtered_df)
Output:
示例代码 20: 使用 lookup
方法过滤数据
import pandas as pd
# 创建示例 DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 40],
'website': ['pandasdataframe.com', 'example.com', 'pandasdataframe.com', 'test.com']}
df = pd.DataFrame(data)
# 使用 lookup 方法过滤数据
filtered_data = df.lookup([0, 1], ['website', 'website'])
print(filtered_data)
以上就是 Pandas 中数据过滤的常用方法,希望对你的数据分析工作有所帮助。