Pandas-Python中如何筛选DataFrame某列符合特定条件的取值
你现有代码的逻辑存在错误:b['prod_price'] < 500返回的是一列布尔值,遍历该布尔序列没有实际筛选作用,且循环内直接将整列prod_price赋值给c,最终输出的一定是未过滤的完整列。
实现需求的正确写法
你可以直接用Pandas的布尔索引配合loc方法实现,不需要写循环:
- 若需要返回过滤后的
prod_price列(Series格式):
# 筛选prod_price小于50的值,直接返回对应原值 c = b.loc[b['prod_price'] < 50, 'prod_price']
如果需要调整判断条件,把< 50替换为你需要的规则即可,比如要筛选小于500就改为< 500。
- 若需要返回Python列表格式的结果:
c = b.loc[b['prod_price'] < 50, 'prod_price'].tolist()
- 若需要保留
prod_price符合条件的整行数据(返回过滤后的完整DataFrame):
filtered_b = b[b['prod_price'] < 50]
效果示例
假设你的b DataFrame原始数据如下:
| 索引 | prod_price |
|---|---|
| 0 | 30 |
| 1 | 60 |
| 2 | 45 |
| 3 | 55 |
执行筛选小于50的代码后,得到的c结果为:
0 30 2 45 Name: prod_price, dtype: int64
直接返回符合条件的原值,不会输出布尔判断结果。
内容的提问来源于stack exchange,提问作者user17593963
相关产品推荐
相关产品推荐

