Pandas `DataFrame` 数据筛选与过滤

1. Pandas DataFrame 数据筛选与过滤 基础

Pandas 中的数据筛选与过滤是一个常用操作,可以帮助你根据某些条件选择符合要求的数据。以下是关于 Pandas DataFrame 数据筛选与过滤的详细讲解。

1. 按列筛选

可以通过列名来选择 DataFrame 中的特定列。

import pandas as pd

# 创建一个简单的 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12]
})

# 选择列 'A' 和 'B'
df_filtered = df[['A', 'B']]
print(df_filtered)

2. 按条件筛选行

可以根据条件筛选符合要求的行,条件可以是数值、字符串或布尔表达式。

2.1 按数值条件筛选

例如,选择列 A 中大于 2 的所有行:

df_filtered = df[df['A'] > 2]
print(df_filtered)
2.2 使用多个条件筛选

可以使用逻辑运算符(& 表示与,| 表示或,~ 表示非)来连接多个条件。

df_filtered = df[(df['A'] > 2) & (df['B'] < 8)]
print(df_filtered)

注意:在多个条件中,必须将每个条件用括号括起来。

2.3 按字符串条件筛选

你还可以根据列中的字符串内容进行筛选,例如选择列 C 中包含“1”的行:

df_filtered = df[df['C'].astype(str).str.contains('1')]
print(df_filtered)

3. 按位置筛选行和列

3.1 使用 .iloc[] 根据位置筛选

iloc[] 用于按位置筛选数据,它接受行和列的索引位置。

# 选择第 1 行到第 2 行,和第 1 列到第 2 列
df_filtered = df.iloc[0:2, 0:2]
print(df_filtered)
3.2 使用 .loc[] 根据标签筛选

loc[] 用于根据标签选择数据,既可以选择行标签,也可以选择列标签。

# 选择行标签为 0 和 1,列标签为 'A' 和 'B'
df_filtered = df.loc[0:1, ['A', 'B']]
print(df_filtered)

4. 按索引筛选

如果你想通过 DataFrame 的索引进行筛选,可以使用 .index.loc[]

df_filtered = df[df.index % 2 == 0]  # 选择偶数行
print(df_filtered)

5. 缺失值筛选

Pandas 提供了一些方法来筛选缺失值(NaN):

5.1 选择缺失值
df_filtered = df[df['A'].isnull()]
print(df_filtered)
5.2 选择非缺失值
df_filtered = df[df['A'].notnull()]
print(df_filtered)

6. 使用 query() 筛选

query() 允许你使用字符串表达式进行筛选,语法类似 SQL。

df_filtered = df.query('A > 2 and B < 8')
print(df_filtered)

7. 根据值的唯一性筛选

如果你希望选择具有唯一值的行,可以使用 drop_duplicates() 来去除重复行。

df_filtered = df.drop_duplicates(subset=['A'])
print(df_filtered)

8. 按条件替换值

除了筛选外,你还可以根据条件修改 DataFrame 中的数据。

df.loc[df['A'] > 2, 'A'] = 99  # 将 'A' 列中大于 2 的值替换为 99
print(df)

总结

Pandas 提供了多种灵活的方式来筛选、过滤和修改数据,常见的方法包括基于列选择、条件筛选、位置筛选、索引筛选以及查询等。根据具体的需求,选择适合的方法来进行数据处理。

2. Pandas DataFrame 数据筛选与过滤 综合实战

在本节中,我们将结合多个条件进行一个实际的 Pandas 数据筛选与过滤的综合实战,使用一个较为复杂的 DataFrame 来演示筛选、过滤、条件处理等操作。我们将使用一个虚拟的销售数据来说明如何利用 Pandas 进行不同类型的筛选和数据处理。

示例数据

假设我们有一个如下的销售数据 DataFrame,记录了不同产品的销量、价格、折扣信息,以及销售日期。

import pandas as pd

# 创建一个销售数据的 DataFrame
data = {
    'Product': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
    'Sales': [150, 200, 180, 300, 220, 250, 190, 320, 270, 310],
    'Price': [15.5, 25.0, 35.0, 12.0, 40.0, 30.5, 22.5, 50.0, 60.0, 55.0],
    'Discount': [0.1, 0.2, 0.15, 0.05, 0.1, 0.25, 0.3, 0.2, 0.1, 0.05],
    'Date': pd.to_datetime([
        '2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04', '2025-01-05',
        '2025-01-06', '2025-01-07', '2025-01-08', '2025-01-09', '2025-01-10'
    ])
}

df = pd.DataFrame(data)
print(df)

1. 根据价格筛选销量最高的产品

假设我们想筛选出价格大于 30 的所有产品,并查看这些产品的销量。

df_filtered = df[df['Price'] > 30]
print(df_filtered[['Product', 'Price', 'Sales']])

2. 根据销售额计算筛选出利润较高的产品

我们可以通过计算销售额(Price * Sales)来筛选出销售额大于 6000 的产品。

df['Revenue'] = df['Price'] * df['Sales']
df_high_revenue = df[df['Revenue'] > 6000]
print(df_high_revenue[['Product', 'Revenue']])

3. 选择折扣较大的产品

假设我们想筛选出折扣大于 0.2 的所有产品,并且按销量降序排序。

df_discounted = df[df['Discount'] > 0.2].sort_values(by='Sales', ascending=False)
print(df_discounted[['Product', 'Discount', 'Sales']])

4. 在指定日期范围内筛选产品

我们可以根据 Date 列筛选出在 2025 年 1 月 5 日至 1 月 8 日之间的所有产品。

df_date_filtered = df[(df['Date'] >= '2025-01-05') & (df['Date'] <= '2025-01-08')]
print(df_date_filtered[['Product', 'Date']])

5. 按多个条件筛选产品

如果我们想筛选出销量大于 200 且价格大于 30 的产品,可以通过以下方式实现:

df_filtered_multiple = df[(df['Sales'] > 200) & (df['Price'] > 30)]
print(df_filtered_multiple[['Product', 'Sales', 'Price']])

6. 筛选销量前 3 的产品

我们可以使用 nlargest() 函数筛选出销量排名前三的产品。

top_sales = df.nlargest(3, 'Sales')
print(top_sales[['Product', 'Sales']])

7. 根据多个条件计算并筛选

我们可以计算折扣后的销售价格,并根据折扣后的价格筛选出低于 25 的产品。

df['Discounted_Price'] = df['Price'] * (1 - df['Discount'])
df_filtered_price = df[df['Discounted_Price'] < 25]
print(df_filtered_price[['Product', 'Discounted_Price']])

8. 删除重复的产品记录

假设我们的数据集中有重复的产品信息,我们可以使用 drop_duplicates() 来删除这些重复的行。

df_duplicate = df.append(df)  # 故意创建重复数据
df_no_duplicates = df_duplicate.drop_duplicates(subset=['Product'])
print(df_no_duplicates[['Product', 'Sales']])

9. 根据缺失数据筛选

假设某些产品的销量信息丢失(NaN),我们可以筛选出缺失销量信息的产品。

df_with_missing_sales = df.copy()
df_with_missing_sales.loc[2, 'Sales'] = None  # 人为引入缺失数据
df_missing_sales = df_with_missing_sales[df_with_missing_sales['Sales'].isnull()]
print(df_missing_sales[['Product', 'Sales']])

总结

通过这几个综合案例,我们展示了如何利用 Pandas 对 DataFrame 进行多种筛选与过滤操作,涉及数值比较、日期范围筛选、多条件组合、排序、去重等技巧。掌握这些基本操作后,你可以处理更复杂的筛选需求和数据处理任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Agent首席体验官

您的打赏是我继续创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值