Pandas apply调用自定义函数判断英文单词结果异常排查
错误点说明
- apply调用逻辑错误
df.apply(lambda x: is_english_word(df['words']), axis=1)中,axis=1参数下lambda的入参x代表当前遍历到的行数据,你错误传入了完整的df['words']列,导致每次判断都传入了整列数据,无法得到每行的单独校验结果。 - 词库初始化逻辑冗余
你将英文词典的生成逻辑放在了判断函数内部,每次调用函数都会重复加载nltk词库生成字典,执行效率极低,属于完全不必要的重复操作。
修正方案
步骤1:全局初始化英文词典(仅执行一次)
使用set存储词库比用字典更节省资源,存在性判断效率也更高:
from nltk.corpus import words as nltk_words import pandas as pd # 全局仅加载一次词库 english_word_set = set(nltk_words.words())
步骤2:简化判断函数
def is_english_word(word): # 若需要兼容大小写匹配,可改为 return word.lower() in english_word_set return word in english_word_set
步骤3:正确调用apply生成新列
直接对words列调用apply即可,不需要遍历整行,写法更简洁:
df['is_english'] = df['words'].apply(is_english_word)
如果需要沿用遍历整行的写法,正确代码为:
df['is_english'] = df.apply(lambda x: is_english_word(x['words']), axis=1)
运行效果
用你提供的示例数据运行后,输出结果和预期完全一致:
words is_english 0 cat True 1 dog True 2 mark True 3 lillly False
内容的提问来源于stack exchange,提问作者LearningCode
相关产品推荐
相关产品推荐

