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

