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

如何对DataFrame列中的字符串列表执行词形还原?

解决DataFrame列表列的词形还原问题

问题场景

你的DataFrame中df['Review']列的每一行都是字符串列表(比如["eating", "cats", "becoming"]),想要对所有列表执行词形还原得到["eat", "cat", "become"],但现有代码运行报错。

原代码错误原因

你的代码存在两个核心问题:

  • lem函数中用range(len(x))遍历得到的是整数索引,把整数传给lemmatizer.lemmatize()会触发错误——这个方法需要传入字符串,因此出现'int' object has no attribute 'endswith'的提示。
  • lem函数没有返回值,处理后的结果无法传递回去,最终会把None赋值给目标列。

修正后的代码

方法1:自定义函数处理

from nltk.stem import WordNetLemmatizer
import pandas as pd

lemmatizer = WordNetLemmatizer()

def lem(word_list):
    # 遍历列表中的每个单词,执行词形还原后返回新列表
    return [lemmatizer.lemmatize(word) for word in word_list]

# 直接对Review列应用函数,无需指定axis=1(Series级别操作)
df['Review'] = df['Review'].apply(lem)

方法2:简化为lambda表达式

如果不想单独定义函数,可以直接用lambda表达式实现:

df['Review'] = df['Review'].apply(lambda lst: [lemmatizer.lemmatize(word) for word in lst])

进阶优化(可选)

WordNetLemmatizer默认按名词规则还原,若要更准确处理动词、形容词等,可以手动指定词性参数:

def lem_with_pos(word_list):
    processed = []
    for word in word_list:
        # 先尝试动词还原,再尝试名词,提升还原准确性
        lemma = lemmatizer.lemmatize(word, pos='v')
        lemma = lemmatizer.lemmatize(lemma, pos='n')
        processed.append(lemma)
    return processed

df['Review'] = df['Review'].apply(lem_with_pos)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:35:07