处理CSV评论情感分析时出现'float' object is not subscriptable错误
问题原因分析
错误根源在这行代码:df['Review_Sentiment']=df['sentiment'].apply(Review_To_Sent)
你调用df['sentiment'].apply()时,是把sentiment列的每个单独浮点值传给Review_To_Sent函数的row参数,而非DataFrame的整行数据。此时row是float类型,用row['sentiment']做下标访问自然会触发“float对象不可下标”的错误。
修复方案
两种简洁的修复方式,任选其一即可:
方案一:修改函数适配单个数值
把Review_To_Sent改成直接处理单个浮点值的逻辑,无需行下标访问:
def Review_To_Sent(polarity): if polarity < -0.05 : return 'negative' if polarity > 0.05 : return 'positive' else: return 'neutral' # 保持原apply调用不变 df['Review_Sentiment']=df['sentiment'].apply(Review_To_Sent)
方案二:按整行调用apply
如果想保留函数里按行访问的逻辑,改为对整个DataFrame调用apply并指定axis=1(按行处理):
# 函数逻辑无需修改 def Review_To_Sent(row): if row ['sentiment'] < -0.05 : return 'negative' if row['sentiment'] > 0.05 : return 'positive' else: return 'neutral' # 修改apply调用对象为整个df,指定axis=1 df['Review_Sentiment']=df.apply(Review_To_Sent, axis=1)
额外优化建议
- 可以用
numpy.where简化情感标注逻辑,避免自定义函数,代码更高效简洁:
import numpy as np df['Review_Sentiment'] = np.where(df['sentiment'] < -0.05, 'negative', np.where(df['sentiment'] > 0.05, 'positive', 'neutral'))
- 记得在代码开头补充导入:
from textblob import TextBlob,否则会触发NameError。
内容的提问来源于stack exchange,提问作者gia blum
相关产品推荐
相关产品推荐

