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

Pandas数据帧间的完全字符串匹配实现问题

Pandas数据帧间的完全字符串匹配实现问题

老哥,我太懂你这种翻了一堆问题还是踩坑的崩溃感了!要实现这种完全字符串匹配其实没那么复杂,你之前大概率是不小心用了支持部分匹配的方法(比如str.contains()),咱们直接用Pandas原生的精确匹配方案就行,给你一步步说清楚:

首先先把你给出的两个数据帧用代码还原出来,方便你直接复现测试:

import pandas as pd

# 构造你的DataFrame A
df_a = pd.DataFrame({
    'ID': [1,2,3,4,5,6,7],
    'Text': ['admin', 'Care', 'Office', 'Doctor', 'be', 'to', 'in'],
    'score': [10.4, 2.0, 5.0, 0.5, 0.2, 0.9, 0.8]
})

# 构造你的DataFrame B
df_b = pd.DataFrame({
    'ID': [1,2],
    'Labels': ['Office', 'Doctor'],
    'Places': ['Upper', 'Lower']
})

方法一:用isin()实现精确匹配(最简洁)

isin()是Pandas专门用来做精确成员检查的方法,完全符合你要的“整串完全匹配”需求,直接筛选df_a中Text列的值完全出现在df_b的Labels列里的行:

# 筛选完全匹配的行
filtered_df = df_a[df_a['Text'].isin(df_b['Labels'])]
print(filtered_df)

运行后得到的结果就是你要的:只保留Text为Office和Doctor的行,完全不会出现部分匹配的情况。

方法二:用merge()实现精确匹配(适合需要关联两表数据的场景)

如果你之后还需要把df_b里的其他列(比如Places)也关联过来,用merge()更合适,指定how='inner'(内连接)就只会保留完全匹配的行:

# 内连接,只保留Text和Labels完全匹配的行
merged_df = pd.merge(df_a, df_b, left_on='Text', right_on='Labels', how='inner')
# 如果只需要保留原df_a的列,直接筛选就行
merged_df = merged_df[df_a.columns]

额外注意事项(踩坑预警!)

很多人会遇到“明明字符串看起来一样却匹配不上”的情况,大概率是字符串前后有隐形的空格或者换行符,建议先做一步清洗:

# 去除字符串两端的空白字符(空格、换行、制表符等)
df_a['Text'] = df_a['Text'].str.strip()
df_b['Labels'] = df_b['Labels'].str.strip()

先做清洗再匹配,能避免很多莫名其妙的失败~

备注:内容来源于stack exchange,提问作者Rose_Trojan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:48:12