AttributeError: 'DataFrame'对象无'DataFrame'属性 Python情感分析报错排查
报错根因
AttributeError: 'DataFrame' object has no attribute 'DataFrame'的触发原因非常明确:你已经将一个已实例化的pandas DataFrame对象命名为tweet,而DataFrame是pandas库的顶层构造类,不属于某个已存在的DataFrame实例的属性或方法,因此调用tweet.DataFrame()会抛出属性不存在的错误。
解决方法
按照你要生成包含原文本、清洗后文本、情感结果的新DataFrame的需求,可按以下步骤修改代码:
- 首先确认pandas导入方式,创建新DataFrame必须调用pandas库下的
DataFrame类,常规导入用法如下:
import pandas as pd # 情感判定函数需要依赖TextBlob,补充导入 from textblob import TextBlob
- 如果你要基于已有的名为
Tweet的原始数据集加工,直接对原始列调用你写好的处理函数即可,不需要手动传入text创建:
# 对原推文文本做清洗、词干提取 Tweet['clean_tweets'] = Tweet['full_text'].apply(cleanText).apply(stem) # 计算情感值,这里需要先将清洗后的文本转为TextBlob对象才能读取sentiment属性 Tweet['sentiment'] = Tweet['clean_tweets'].apply(lambda x: sentiment(TextBlob(x))) # 抽取目标列生成新的tweet2 tweet2 = Tweet[['full_text', 'clean_tweets', 'sentiment']].copy()
- 如果你是要把三个独立的列表(原文本列表、清洗后文本列表、情感结果列表)合并为新DataFrame,正确写法如下:
# 假设full_text_list、clean_tweets_list、sentiment_list是你提前处理好的三个等长列表 tweet2 = pd.DataFrame({ 'full_text': full_text_list, 'clean_tweets': clean_tweets_list, 'sentiment': sentiment_list })
额外注意事项
- Python对变量名大小写敏感,你提到原始数据集命名为大写开头的
Tweet,写代码时注意不要和小写的tweet混淆,避免误调用对象。 - 你写的
sentiment函数中直接调用了cleaned_text.sentiment.polarity,注意传入该函数的参数必须是TextBlob实例,不能直接传字符串,否则会触发新的属性错误。
内容的提问来源于stack exchange,提问作者Julian Torres Torres
相关产品推荐
相关产品推荐

