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

对推文CSV文件做词频统计时触发IndexError: list index out of range错误

解决推文词频统计代码的索引越界错误

嘿,我来帮你搞定这个问题!你遇到的IndexError是因为CSV文件里有些行没有第二列数据,导致代码尝试访问row[1]的时候找不到对应的元素。咱们一步步修复这个问题,顺便优化下你的代码,让它更高效可靠:

错误原因分析

Traceback (most recent call last): File "wordcount.py", line 11, in csv_words = row[1].split(" ") IndexError: list index out of range

这个错误明确告诉你:当前遍历到的row列表长度小于2,也就是这一行的列数不足。可能是CSV里存在空行,或者某些推文行的格式有问题,缺少第二列的文本内容。

修正后的完整代码

我优化了你的代码,解决了索引问题,同时提升了词频统计的效率,还加入了单词清理逻辑(避免大小写、标点干扰统计):

import csv
from collections import Counter

def clean_word(word):
    # 清理单词:转小写、去除前后空白、移除常见标点
    cleaned = word.strip().lower().strip('.,!?()"')
    return cleaned if cleaned else None

words = []
with open('Hometovotetweets.csv', 'r', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    next(reader)  # 跳过CSV表头
    for row_num, row in enumerate(reader, start=2):  # 从第2行开始计数(表头是第1行)
        # 先检查当前行是否有至少2列数据,避免索引越界
        if len(row) < 2:
            print(f"⚠️ 警告:第{row_num}行数据格式异常,已跳过")
            continue
        tweet_text = row[1]
        # 拆分并清理每个单词
        for word in tweet_text.split(" "):
            cleaned_word = clean_word(word)
            if cleaned_word:
                words.append(cleaned_word)

# 用Counter高效统计词频,比手动遍历count快N倍
word_counts = Counter(words)

# 将统计结果写入新CSV
with open('HTVwordcount.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['单词', '出现次数'])  # 写入表头
    # 按出现次数从高到低写入
    for word, count in word_counts.most_common():
        writer.writerow([word, count])

关键修复&优化点

  • 修复模块导入错误:把错误的import csv from collections import Counter拆分成两行正确的导入语句
  • 添加索引安全检查:在访问row[1]前先判断行长度,避免越界,同时打印警告提示异常行号
  • 高效词频统计:用collections.Counter代替手动调用words.count(i),尤其是数据量大的时候,效率提升非常明显
  • 单词清理逻辑:统一转小写、移除标点和空白,避免同一个单词因为大小写(比如"Vote"和"vote")或标点(比如"vote."和"vote")被统计成不同条目
  • 修复CSV写入错误:原来的edgl是未定义变量,现在用统计后的word_counts;同时使用Python3推荐的文本模式'w'(而非二进制'wb'),添加newline=''避免输出CSV出现多余空行
  • 新增表头:让输出的CSV文件更易读

额外提醒

如果你的CSV文件不是用逗号分隔的(比如制表符),需要在csv.reader里指定分隔符,比如:

reader = csv.reader(csvfile, delimiter='\t')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:50:38