如何使用Pandas比较DataFrame中tokenizing与lemmatization列是否一致
问题原因
你当前check列全为False的核心原因是tokenizing列存储的是spaCy的Token对象列表,而lemmatization列存储的是字符串列表,两类对象即使打印内容看起来一致,实际判定相等时也会返回False。
修复方案
修改分词函数返回分词的文本内容而非Token对象,保证两列数据类型统一后直接比较即可:
from spacy.lang.id import Indonesian import pandas as pd nlp = Indonesian() nlp.add_pipe('lemmatizer') nlp.initialize() data = [ 'pergi untuk melakukan penanganan banjir', 'baca buku itu asik' ] df = pd.DataFrame({'text': data}) # 分词函数返回token的文本内容,存储为字符串列表 def tokenizer(words): return [token.text for token in nlp(words)] # 词形还原函数直接处理原始文本,避免类型转换问题 def lemmatizer(text): return [token.lemma_ for token in nlp(text)] df['tokenizing'] = df['text'].apply(tokenizer) df['lemmatization'] = df['text'].apply(lemmatizer) # 两列都是字符串列表,可直接用eq比较 df['check'] = df['tokenizing'].eq(df['lemmatization']) print(df)
运行后输出的check列会完全符合预期:第一条返回False、第二条返回True。
补充说明:你原来代码里的
df.to_clipboard(sep='\s\s+')写法有误,to_clipboard的sep参数不支持正则表达式,需要多空格分隔直接传sep=' '即可,该问题不影响check列的计算结果。
内容的提问来源于stack exchange,提问作者caeruleum
相关产品推荐
相关产品推荐

