Pandas DataFrame调用underthesea的word_tokenize分词报错如何解决
错误产生原因
- 核心原因是
Review列存在缺失值,pandas读取csv文件时默认将空值识别为NaN,属于浮点型数据。而underthesea的word_tokenize方法会默认对输入文本执行decode转码操作,浮点型数据不具备decode方法,因此触发该AttributeError报错。 - 次要场景为
Review列混杂了非字符串类型的数值内容,比如纯数字的评论被pandas自动识别为整型/浮点型,同样会触发该报错。
解决方法
步骤1:排查异常值分布
先执行以下代码确认Review列的异常值情况:
# 查看列中缺失值总数 print(df['Review'].isna().sum()) # 查看列内所有值的类型分布 print(df['Review'].apply(type).value_counts())
步骤2:选择适配的处理方案
你可以根据业务需求从以下方案中选择:
- 方案1:删除异常数据行
适合对数据量要求不高、无效评论无分析价值的场景,代码如下:# 仅保留Review列为字符串类型的有效行 df = df[df['Review'].apply(lambda x: isinstance(x, str))].reset_index(drop=True) # 执行分词 df['review_token'] = df['Review'].apply(word_tokenize) - 方案2:异常值替换为空字符串
适合需要保留所有原始行的场景,代码如下:# 所有非字符串内容统一转为空字符串 df['Review'] = df['Review'].apply(lambda x: x if isinstance(x, str) else '') # 执行分词 df['review_token'] = df['Review'].apply(word_tokenize) - 方案3:增加分词异常捕获逻辑
适合数据类型混杂、不确定会触发什么异常的场景,避免单条数据异常导致全量任务终止:def safe_tokenize(text): try: return word_tokenize(text) except (AttributeError, TypeError): # 异常情况返回空的分词列表 return [] df['review_token'] = df['Review'].apply(safe_tokenize)
内容的提问来源于stack exchange,提问作者Lê Phương Oanh Nguyễn
相关产品推荐
相关产品推荐

