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

如何在Pandas中使用.loc对多列进行大小写不敏感筛选

Pandas大小写不敏感数据筛选实现

需要实现Pandas中大小写不敏感的数据筛选,比如输入'fred'时能匹配到包含'Fred'的记录。现有如下find函数,但无法通过.lower()同时转换输入字符串和待筛选值的大小写:

def find(**kwargs):
    result = data.loc[data.rename(columns={"FirstName": "first",
                             "LastName": "last", 
                             "City": "city",
                             })[list(kwargs.keys())]
                    .eq(list(kwargs.values())).all(axis=1)]
    return result

示例数据

FirstNameLastNameCity
FredBobAustin
BillyBobNYC

期望结果

调用find(first='fred')时,返回包含Fred的记录:

FirstName LastName    City
0      Fred      Bob  Austin

解决方案

要实现大小写不敏感匹配,核心是同时将待筛选的列值和输入的筛选参数统一转为小写(或大写),再进行相等判断。修改后的find函数如下:

def find(**kwargs):
    # 定义列名映射(原列名 -> 简化名)
    col_mapping = {"FirstName": "first", "LastName": "last", "City": "city"}
    # 反转映射,方便从简化名找到原列名
    reverse_mapping = {v: k for k, v in col_mapping.items()}
    
    # 提取需要筛选的原列名,以及转为小写的筛选值
    target_cols = [reverse_mapping[key] for key in kwargs.keys()]
    lower_values = [val.lower() for val in kwargs.values()]
    
    # 将目标列转为小写后,与筛选值匹配,所有条件满足则保留该行
    match_mask = data[target_cols].apply(lambda col: col.str.lower()).eq(lower_values).all(axis=1)
    
    return data.loc[match_mask]

使用示例

import pandas as pd

# 构造示例数据集
data = pd.DataFrame({
    "FirstName": ["Fred", "Billy"],
    "LastName": ["Bob", "Bob"],
    "City": ["Austin", "NYC"]
})

# 调用筛选函数,传入小写参数
result = find(first='fred')
print(result)

输出结果:

FirstName LastName    City
0      Fred      Bob  Austin

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:45:36