Pandas灵活筛选需求:如何排除Counterparty为Bank的DataFrame记录
嘿,这个需求太常见了,我给你几个实用的实现方案,都是日常处理Pandas DataFrame时常用的套路:
1. 基础布尔索引(最直接)
这是最经典的写法,直接通过布尔数组筛选符合条件的行:
import pandas as pd # 假设你的DataFrame叫df filtered_df = df[df['Counterparty'] != 'Bank']
注意:如果你的Counterparty字段存在空值(NaN),这种写法会自动排除NaN的行——因为NaN != 'Bank'的结果是False,所以NaN行不会被筛选出来。
2. 包含空值的筛选(如果需要保留NaN行)
如果你想同时保留Counterparty不等于Bank以及空值的行,可以用两种方式实现:
方式一:组合条件
filtered_df = df[(df['Counterparty'] != 'Bank') | df['Counterparty'].isna()]
方式二:用eq()取反(更简洁)
filtered_df = df[~df['Counterparty'].eq('Bank')]
eq('Bank')会生成一个布尔数组,标记所有等于Bank的行,前面加~就是取反,这样既保留了非Bank的行,也会保留NaN的行(因为NaN和Bank不相等,取反后为True)。
3. 用query()方法(更贴近SQL风格)
如果你习惯SQL的写法,query()方法会让条件看起来更直观,尤其是复杂筛选时可读性更高:
filtered_df = df.query("Counterparty != 'Bank'") # 如果要保留NaN行,写法如下: filtered_df = df.query("Counterparty != 'Bank' or Counterparty.isna()")
小提示:如果你的字段名包含空格或特殊字符,在query()里需要用反引号包裹字段名,比如字段是Counter Party的话,就写 `Counter Party` != 'Bank'。
内容的提问来源于stack exchange,提问作者Number Logic
相关产品推荐
相关产品推荐

