pandas 条件筛选

本文介绍使用Python的Pandas库进行数据筛选的方法。通过定义函数和使用lambda表达式两种方式,实现了从数据集中筛选出年龄在18到30岁之间且评分在85到100之间的记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pandas as pd
import os
os.chdir('路径')
#条件筛选方案一
def age_18_to_30(a):
    return 18 <= a < 30
def level_a(s):
    return 85 <= s <= 100
p8 = pd.read_excel('P8.xlsx',index_col='ID')
p8 = p8.loc[p8.Age.apply(age_18_to_30)].loc[p8.Score.apply(level_a)]
print(p8)

#条件筛选方案二
p8 = p8.loc[p8.Age.apply(lambda a: 18 <= a < 30)].loc[p8.Score.apply(lambda s:85 <= s <= 100)]
print(p8)
### 如何使用 Pandas 进行 DataFrame 条件筛选 #### 导入库与创建示例数据 为了展示如何利用 `pandas` 库中的功能来实现基于条件数据筛选,先要确保已经安装并导入了该库。接着可以构建一些简单的测试数据用于演示目的。 ```python import pandas as pd df = pd.DataFrame( [[1, 2], [4, 5], [7, 8]], index=['cobra', 'viper', 'sidewinder'], columns=['移速', '护甲'] ) ``` 此段代码创建了一个具有三行记录的 `DataFrame` 对象,每条记录代表不同种类蛇类的速度和装甲属性[^1]。 #### 基本条件筛选 对于基本的单个条件筛选,可以直接通过布尔索引来完成: ```python result_single_condition = df[df['护甲'] >= 5] print(result_single_condition) ``` 上述命令会返回所有满足 `'护甲'` 列大于等于5的所有行。 #### 复合条件筛选 当涉及到多个条件时,则可以通过逻辑运算符 (`&`, `|`) 将各个条件组合起来形成更复杂的查询表达式: ```python multi_conditions = (df['移速'] > 3) & (df['护甲'] != 5) filtered_data = df[multi_conditions] print(filtered_data) ``` 这里展示了如何同时应用两个条件——即速度超过3且装甲不等于5的情况下的筛选结果。 #### 使用 `.loc[]` 方法进行高级筛选 除了直接采用布尔索引外,还可以借助于`.loc[]`访问器来进行更加灵活多样的定位操作,比如按标签选取特定位置上的元素或是配合可调用对象(如 lambda 函数)一起工作以简化某些类型的过滤过程: ##### Lambda 表达式的运用 下面的例子说明了怎样利用匿名函数快速找到那些在 `"护甲"` 列上数值恰好为8的行项: ```python lambda_selection = df.loc[lambda row: row['护甲'] == 8] print(lambda_selection) ``` 这段脚本能够高效地获取符合条件的结果集,并保持原始索引不变[^3]。 ##### 自定义函数作为筛选标准 如果希望进一步增强灵活性,也可以编写专门针对当前上下文环境定制化的辅助方法来做判断依据: ```python def select_by_armor(df_row): return df_row['护甲'] == 8 custom_function_filtering = df.loc[select_by_armor] print(custom_function_filtering) ``` 这种方法允许使用者根据具体需求调整内部逻辑而不必受限于内联形式带来的局限性。 #### 批量更新筛选后的数据 最后值得一提的是,在完成了初步的选择之后还经常会有后续处理的需求,例如对选定部分实施统一性的变更动作等。此时便可通过链式调用来达成目标: ```python batch_update_example = df.copy() batch_update_example.loc[(batch_update_example['移速'] > 3), :] = 50 print(batch_update_example) ``` 以上实例中,凡是符合指定条件下(`"移速">3`)的所有单元格均被赋予新值50,实现了批量替换的效果[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_50980171

你的鼓励就是对我莫大的支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值