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

Pandas如何对比样本量不同的两个DataFrame的字符串列

不同长度DataFrame的text列精确匹配实现方案

你此前代码报错的核心原因是==对比两个Series时要求两者长度、索引标签完全一致,仅适用于同维度同索引的DataFrame对比场景,不适用于长度不同的数据集求共同值的需求。

实现方法

方法1:merge取交集(推荐)

直接通过内连接获取两个表中text完全一致的行,代码如下:

# how="inner"代表取两个表on字段的交集,默认匹配完全一致的值
matched_result = dftrain.merge(dftest, on="text", how="inner")
# 如果只需去重后的匹配文本值,追加去重逻辑即可
unique_matched_text = matched_result["text"].drop_duplicates().tolist()

针对你给出的示例数据,运行后得到的匹配结果为["How are you?"],完全符合预期。

方法2:isin筛选

如果需要分别从两个原始表中提取匹配的行,可通过集合求交集后筛选:

# 先取两个text列的共同值
common_texts = set(dftrain["text"]) & set(dftest["text"])
# 从dftrain中筛选匹配行
train_matched_rows = dftrain[dftrain["text"].isin(common_texts)]
# 从dftest中筛选匹配行
test_matched_rows = dftest[dftest["text"].isin(common_texts)]

扩展:非精确匹配调整

如果后续需要支持大小写不敏感、忽略首尾空格/多余标点的匹配,可先对text列做统一预处理再匹配:

# 自定义文本清洗逻辑
def clean_text(s):
    # 转小写+去除首尾空格,可按需追加去除特殊字符等逻辑
    return s.strip().lower()

# 生成清洗后的列
dftrain["clean_text"] = dftrain["text"].apply(clean_text)
dftest["clean_text"] = dftest["text"].apply(clean_text)

# 对清洗后的字段做匹配即可
matched_result = dftrain.merge(dftest, on="clean_text", how="inner")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:45:02