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

DataFrame中filter与loc选取列的区别及适用场景

Pandas中filter()与loc选取列的差异及适用场景

核心差异对比

1. 功能定位与语法逻辑

  • df.filter(items=["A","D"]):这是专门用于按标签筛选行/列的工具,默认选中所有行,仅通过items参数指定目标列。它的设计聚焦于标签匹配,除了精确指定列名,还支持模糊匹配的扩展玩法。
  • df.loc[:, ["A","D"]]:loc是更通用的标签索引器,语法为loc[行筛选规则, 列筛选规则],这里的:代表选中所有行,后续列表指定列。它不止能选列,还可同时对行做复杂条件筛选,是全能型的标签操作工具。

2. 匹配规则的灵活性

  • filter()的匹配方式更丰富:
    • 除items精确匹配列名外,支持like参数(比如df.filter(like="A")会选中所有列名含"A"的列)
    • 支持regex正则匹配(比如df.filter(regex="^A|D$")选中以A开头或D结尾的列)
  • loc仅支持精确标签匹配:要么指定列名列表,要么按标签顺序切片(比如loc[:, "A":"D"]选中A到D的连续列),不支持模糊匹配。

3. 对不存在标签的处理

  • filter()会自动忽略不存在的标签:如果写df.filter(items=["A","X"])但X列不存在,不会报错,仅返回存在的A列。
  • loc会直接抛出KeyError:若指定的列名有无效项,立刻报错,要求所有列名必须有效。

适用场景选择

优先用filter()的情况

  • 需要对列/行标签做模糊筛选(比如按前缀、后缀、包含的字符串找列)
  • 不确定目标标签是否全部存在,想避免报错、自动忽略无效项
  • 仅需单纯筛选标签,不需要同时处理行的条件

优先用loc的情况

  • 需要同时对行和列进行基于标签的筛选(比如选中"B列值大于5"的行,再取A、D列)
  • 要求精确控制列选择,且希望列名无效时立刻报错提示
  • 需要使用列标签的连续切片(比如从A列切到C列)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:55:21