如何基于列字符串匹配规则筛选pandas DataFrame的行
你可以使用pandas提供的str.contains()字符串方法实现子串包含匹配,示例代码如下:
df.loc[df['name'].str.contains('Mary', na=False)]
说明
str.contains()默认支持正则匹配,如果你只需要普通的子串查找,不需要正则能力,可以额外加regex=False参数提升运行效率- 加
na=False是为了处理name列存在空值(NaN)的场景:空值调用字符串方法默认会返回NaN,直接传入loc会触发报错,加na=False会把空值对应的行直接判定为不匹配过滤掉,如果你需要保留空值行,可以把这个参数改为na=True - 如果你的
name列不是字符串类型,可以先做类型转换再匹配:df.loc[df['name'].astype(str).str.contains('Mary', na=False)]
常用扩展场景
如果需要不区分大小写匹配(同时命中mary/Mary/MARY等写法),可以加case=False参数:
df.loc[df['name'].str.contains('Mary', case=False, na=False)]
如果你需要的是匹配name以Mary开头/结尾的场景,可以直接换用更针对性的方法:
- 匹配开头:
df.loc[df['name'].str.startswith('Mary', na=False)] - 匹配结尾:
df.loc[df['name'].str.endswith('Mary', na=False)]
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

