无法遍历 Dataframe 行:值的长度与索引的长度

问题描述

我不完全确定为什么会出现此错误,因为我目前正在使用一个非常 的简单数据框。这是数据框的示例(日期列是索引):

日期 新闻
2021-02-01 这是一个新闻标题。这是新闻摘要
2021-02-02 这是另一个标题。这是另一个总结

所以基本上,我想要做的就是一次一行遍历数据框并拉出新闻项目,在其上使用情绪强度分析器并将复合值存储到一个单独的列表中(我将其附加到空列表)。但是,当我运行循环时,它给了我这个错误

值的长度 (5085) 与索引的长度 (2675) 不匹配

这是我迄今为止的代码示例:

      sia = SentimentIntensityAnalyzer()
      news_sentiment_list = []  
      
      for i in range (0,(df_news.shape[0]-1)):
        n = df_news.iloc[i][0]
        news_sentiment_list.append(sia.polarity_scores(n)['compound'])
    
      df['News Sentiment'] = news_sentiment_list

我已经使用 FOR 循环以多种不同的方式尝试了循环语句,但我总是返回该错误。老实说,我在这一点上迷路了 =(

编辑:数据框的形状是:(5087,1)

解决方法

目标数据帧是 df 而你在 df_news 上循环,索引可能不一样。您可能需要先合并数据帧。

此外,有一种更简单的方法可以解决您的问题,从而避免循环处理。假设您的数据框 df_news 包含列 News(如您的表格所示),您只需执行以下操作即可向此数据框添加一列:

sia = SentimentIntensityAnalyzer()
df_news['News Sentiment'] = df_news['News'].apply(lambda x: sia.polarity_scores(x)['compound'])

使用 pandas 时的一般规则是尽可能避免使用 for-loops,除非您有非常特殊的边缘情况,panda 的内置方法就足够了。