You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于命令行输入通用过滤DataFrame并移除指定行

通用DataFrame过滤方案:处理自定义命令行输入格式

嘿,我来帮你搞定这个能适配所有指定输入格式的通用过滤方法!我们可以分三步来实现:先解析用户的输入字符串,再构建对应的过滤规则,最后把规则应用到DataFrame上筛选出需要保留的行。

首先,先把你的示例DataFrame定义出来,方便后续测试验证:

import pandas as pd

data = {
    'Id': [1,2,3,4,5,6,7,8,9,10,11,12],
    'CTY': ['BNG','HYD','MUM','BNG','HYD','MUM','BNG','HYD','MUM','BNG','HYD','MUM'],
    'Types': ['school','school','school','restaurant','restaurant','restaurant','hospital','hospital','hospital','school','restaurant','hospital'],
    'isOpen': [True,True,True,False,True,False,True,True,True,False,True,True],
    'seats': [100,150,200,1000,1500,500,700,300,1000,200,50,900]
}
df = pd.DataFrame(data)

核心思路拆解

用户的输入可以拆分为多个条件组(用|分隔),每个条件组是城市:类型列表的格式(不同类型用逗号分隔)。我们需要把这些条件转换成布尔掩码:只要某一行满足「CTY等于条件组中的城市,且Types属于该组的类型列表」,就标记为需要移除的行。最后保留未被标记的行即可。

完整实现代码

下面是通用的处理函数,能完美适配你提到的三种输入格式:

def filter_dataframe(df, input_str):
    # 初始化掩码:默认所有行都保留(False表示不需要移除)
    mask = pd.Series([False]*len(df), index=df.index)
    
    # 按|分割多个条件组,同时清理掉输入中可能存在的空格
    condition_groups = [group.strip() for group in input_str.split('|')]
    
    for group in condition_groups:
        # 拆分城市和对应的类型列表
        cty, types_str = group.split(':')
        # 把类型字符串转成集合,提升成员判断的效率
        target_types = set(types_str.strip().split(','))
        # 更新掩码:满足当前条件组的行标记为需要移除(True)
        mask |= (df['CTY'] == cty) & df['Types'].isin(target_types)
    
    # 返回过滤后的DataFrame:保留掩码为False的行
    return df[~mask]

三种输入场景测试

场景1:输入BNG:school

result1 = filter_dataframe(df, "BNG:school")
print(result1)

输出会移除Id=1和Id=10的行,也就是所有CTY=BNG且Types=school的记录。

场景2:输入HYD:school,restaurant

result2 = filter_dataframe(df, "HYD:school,restaurant")
print(result2)

输出会移除Id=2(HYD:school)、Id=5(HYD:restaurant)、Id=11(HYD:restaurant)的行。

场景3:输入BNG:school | HYD:school,restaurant

result3 = filter_dataframe(df, "BNG:school | HYD:school,restaurant")
print(result3)

输出会同时移除场景1和场景2中标记的所有行。

额外优化说明

  • 自动兼容输入中的空格:比如BNG:school | HYD:school,restaurant里的空格会被strip()清理,不影响规则判断。
  • 类型列表顺序不影响结果:因为我们把类型转成了集合,集合的成员判断和顺序无关。
  • 可扩展异常处理:如果担心用户输入格式错误(比如缺少:),可以在函数里添加try-except块,提示用户输入格式不符合要求。

内容的提问来源于stack exchange,提问作者Girish HM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:37:30