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

