Python做推特NLP情感分析报TypeError: expected string or bytes-like object求助
报错原因
TypeError: expected string or bytes-like object 是因为df['full_text']列存在非字符串类型的内容(最常见的是空值NaN、数值型数据),re.sub()方法只能处理字符串/字节类输入,拿到非合规输入就会触发报错。
除此之外你的代码还存在两处不符合需求和可运行要求的问题:
- 未实现你提到的文本转小写逻辑
- 最后将numpy数组赋值给
df变量后调用head()会触发新报错,numpy数组没有pandas对象的head()方法
修复方案
- 预处理
full_text列,先填充空值并强制所有内容转为字符串类型 - 在文本清洗函数中补充转小写逻辑
- 调整结果存储逻辑,避免覆盖原DataFrame
修正后可运行代码
import numpy as np import pandas as pd from textblob import TextBlob import re def clean_data(review): # 先强制转字符串,再转小写 review = str(review).lower() # 原有正则保留,移除@、链接、特殊字符 return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", " ", review).split()) def analize_data(review): analysis = TextBlob(clean_data(review)) if analysis.sentiment.polarity > 0: return 1 elif analysis.sentiment.polarity == 0: return 0 else: return -1 # 先处理full_text列的异常值 df['full_text'] = df['full_text'].fillna('').astype(str) # 用apply方法遍历处理,结果存到新列,不覆盖原df df['sentiment'] = df['full_text'].apply(analize_data) # 输出前20行结果 display(df[['full_text', 'sentiment']].head(20))
内容的提问来源于stack exchange,提问作者Julian Torres Torres
相关产品推荐
相关产品推荐

