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

Python中NLP(LSTM)分词时“Function对象不可迭代”错误求助

解决DataFrame单列分词时的函数不可迭代错误

看起来你在为LSTM任务处理数据分词时踩了个小坑——错误提示说函数对象不可迭代,这是因为你的代码里把tokens变量先赋值成了一个lambda函数,后面又试图把它当成列表去遍历,这肯定行不通。另外,你的代码也没有明确针对Vendor Names列操作,而是直接处理整个DataFrame,逻辑上也需要调整。

错误根源拆解

  • 变量冲突:你写的tokens=lambda x: len (x[df7].split())把tokens变成了一个函数,而不是分词后的结果列表。后面的[w.translate(table) for w in tokens]试图遍历这个函数,自然会抛出TypeError。
  • 未聚焦目标列:整个函数没有明确指定只处理Vendor Names列,而是直接操作整个DataFrame,这会导致后续处理逻辑混乱。

修正后的代码方案

下面是针对Vendor Names列的分词清洗函数,逻辑清晰且能解决你的问题:

import string
import pandas as pd

def clean_vendor_names(df):
    # 先替换掉目标列中的'--'符号
    df['Vendor Names'] = df['Vendor Names'].replace('--', '', regex=False)
    
    # 定义单个文本的处理逻辑
    def process_single_text(text):
        # 处理空值情况(如果有的话)
        if pd.isna(text):
            return []
        # 分割成初始tokens
        tokens = text.split()
        # 去除所有标点符号
        punctuation_table = str.maketrans('', '', string.punctuation)
        tokens = [token.translate(punctuation_table) for token in tokens]
        # 只保留纯字母的token
        tokens = [word for word in tokens if word.isalpha()]
        # 统一转成小写
        tokens = [word.lower() for word in tokens]
        return tokens
    
    # 将处理函数应用到Vendor Names列的每一行,生成新列存储结果
    df['Cleaned Vendor Tokens'] = df['Vendor Names'].apply(process_single_text)
    return df

使用方法

调用这个函数后,你的DataFrame会新增一列Cleaned Vendor Tokens,里面就是每个供应商名称的分词结果:

df7 = clean_vendor_names(df7)

额外提示

如果你的Vendor Names列存在空值,上面的代码已经做了处理,返回空列表;如果不需要保留原列,可以直接覆盖Vendor Names列(不过更推荐保留原数据,用新列存处理后的结果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:03:13