如何将原始推文与计算出的情感值合并到新DataFrame中
解决思路与修改方案
没问题,我帮你调整代码,让原始推文和对应的情感值直接关联起来。核心就是把存储的键从过滤后的文本换成原始推文,同时确保每一条原始内容和情感值的对应关系不跑偏。
先看你原始代码里的小问题:手动维护x索引容易出错,而且用字典存储时如果有重复推文会被覆盖。我给你优化后的代码,同时解释关键改动点:
修改后的完整代码
import pandas as pd import re from textblob import TextBlob # 假设你已经初始化好翻译器对象 translator # 用列表存储元组更稳妥,避免重复推文被覆盖 tweet_sentiment_data = [] # 用enumerate遍历,直接拿到索引和原始推文 for count, original_tweet in enumerate(df['text'], start=1): # 保留你原来的文本过滤逻辑 filtered_tweet = re.sub('[^A-Za-z0-9]', ' ', original_tweet) filtered_tweet = re.sub(' +',' ', filtered_tweet) # 翻译(因为只传了一个文本,直接取第一个结果即可) translation = translator.translate([filtered_tweet], dest='en')[0] # 计算情感值 sentiment_analysis = TextBlob(translation.text) sentiment_value = sentiment_analysis.sentiment # 把原始推文和情感值作为元组加入列表 tweet_sentiment_data.append( (original_tweet, sentiment_value) ) # 保留你原来的进度打印 print(count) print(f"原始推文: {original_tweet}") print(f"情感分析结果: {sentiment_value}") # 生成最终的DataFrame df2 = pd.DataFrame(tweet_sentiment_data, columns=['Original Tweets', 'Sentiment'])
关键改动说明
替换存储键为原始推文:
不再用过滤后的translation.origin作为字典键,而是直接用遍历得到的original_tweet,确保最终DataFrame展示的是原始推文内容。用列表存储元组替代字典:
避免了原始推文重复时被覆盖的问题(如果你的原始数据集有重复行,字典会丢失数据,列表元组能完整保留所有记录)。简化遍历与索引逻辑:
用enumerate(df['text'], start=1)直接获取计数和原始推文,不用手动维护x变量,减少索引错误的概率。简化翻译结果获取:
因为每次只传入一个过滤后的文本,直接取translations[0]即可,不需要额外的循环。
内容的提问来源于stack exchange,提问作者Mightybundy
相关产品推荐
相关产品推荐

