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
相关产品推荐
相关产品推荐

