You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas从DataFrame列创建列表时出现KeyError: False错误求助

Pandas按列筛选生成列表的问题及解决方法

问题描述

尝试从DataFrame的updated sentiments列筛选对应内容,生成不同情感类别的文本列表时遇到两个问题:

  1. 初始筛选代码报错KeyError: False:
positive = tweet_df[tweet_df['updated sentiments'].equals('positive')]
  1. 后续写的循环代码未按updated sentiments列的行值区分,无法正确填充列表:
pos_words = []
neg_words = []
net_words = []

for i in range(len(tweet_df['updated sentiments'])):
  if tweet_df['updated sentiments'].equals('negative'):
    neg_words.extend(tweet_df['Tweet Body'].tolist())
  elif tweet_df['updated sentiments'].equals('positive'):
    pos_words.extend(tweet_df['Tweet Body'].tolist())
  else:
    net_words.extend(tweet_df['Tweet Body'].tolist())

错误原因

  1. 初始代码错误:equals()方法是用来比较整个Series是否与目标对象完全相等,返回单个布尔值(True/False)。而DataFrame的索引需要的是与行数匹配的布尔数组,直接用单个布尔值会被当成列名查找,因此触发KeyError。
  2. 循环代码错误:循环中每次判断的是整个updated sentiments列是否等于指定字符串,而非当前行的情感值。因此判断条件要么始终成立要么始终不成立,无法按行区分不同情感的文本。

解决方法

方法1:矢量化筛选(推荐,Pandas原生高效写法)

用==替代equals(),==会对Series的每个元素逐一比较,返回布尔数组,可直接用于索引DataFrame,再提取Tweet Body列转为列表:

# 筛选正情感文本并转为列表
pos_words = tweet_df[tweet_df['updated sentiments'] == 'positive']['Tweet Body'].tolist()

# 筛选负情感文本并转为列表
neg_words = tweet_df[tweet_df['updated sentiments'] == 'negative']['Tweet Body'].tolist()

# 筛选中性情感文本并转为列表
net_words = tweet_df[tweet_df['updated sentiments'] == 'neutral']['Tweet Body'].tolist()

方法2:修正循环写法(适合理解遍历逻辑)

使用iterrows()遍历DataFrame的每一行,获取当前行的情感值和文本内容,再分类添加到对应列表:

pos_words = []
neg_words = []
net_words = []

for _, row in tweet_df.iterrows():
    sentiment = row['updated sentiments']
    tweet_body = row['Tweet Body']
    if sentiment == 'negative':
        neg_words.append(tweet_body)
    elif sentiment == 'positive':
        pos_words.append(tweet_body)
    else:
        net_words.append(tweet_body)

内容的提问来源于stack exchange,提问作者No_Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:52:53