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

WhatsApp聊天分析脚本触发KeyError:3327问题求助

解决KeyError: 3327 & 正确统计消息数

嘿,我来帮你搞定这个问题!首先说你的KeyError: 3327——这是因为你写的while True是个无限循环,没有设置停止条件。当循环变量i涨到3327时,你的DataFrame已经没有对应索引的行(你的数据总共只有3327行,索引从0到3326),自然就抛出这个错误了。

另外,我注意到你的统计逻辑也有问题:你现在是每天只取第一条消息来统计作者,这和你想要统计Umesh Yadav的总消息数的需求完全不符,会导致结果完全错误。咱们一起修正这两个问题:

一、快速修复:用Pandas高效统计(推荐)

Pandas就是用来做这种数据统计的,完全不需要手动写循环,代码简洁还高效。直接用这几行就能得到你要的结果:

# 统计Umesh Yadav的消息数
u_count = len(df[df['Author'] == 'Umesh Yadav'])
# 其他用户的消息数 = 总消息数减去Umesh的数量
h_count = len(df) - u_count

print(f"Umesh Yadav的消息总数: {u_count}")
print(f"其他用户的消息总数: {h_count}")

如果你还想看看所有用户的消息分布,用value_counts()更直观:

# 获取所有用户的消息统计
author_stats = df['Author'].value_counts()
# 提取Umesh的数量,要是没有这个用户就返回0
u_count = author_stats.get('Umesh Yadav', 0)
# 其他用户总和
h_count = author_stats.sum() - u_count

# 先打印所有用户的统计
print("所有用户消息统计:")
print(author_stats)
print(f"\nUmesh Yadav: {u_count}条")
print(f"其他用户总计: {h_count}条")

二、如果你非要保留循环写法(不推荐,效率低)

要是你想坚持用循环,那必须给循环加终止条件,同时修正统计逻辑(要遍历每一条消息,不是每天第一条):

total_messages = len(df)
h_count = 0
u_count = 0

# 用for循环代替while,避免无限循环
for i in range(total_messages):
    current_author = df['Author'].iloc[i]
    if current_author == 'Umesh Yadav':
        u_count += 1
    else:
        h_count += 1

print(f"Umesh Yadav的消息数: {u_count}")
print(f"其他用户的消息数: {h_count}")

额外的优化建议

  1. 正则表达式可能漏匹配:你当前的正则pattern可能无法覆盖所有WhatsApp消息格式(比如带特殊字符的用户名、非英语消息),可以换成更通用的版本:
    pattern = r'^(\d{1,2}/\d{1,2}/\d{2,4}), (\d{1,2}:\d{2}\s[APM]{2}) - (.*?): (.*)'
    
  2. 避免漏掉最后一条消息:当前代码在文件读完后,最后一条消息可能没被存入parsedData,可以在while True循环结束后加这段代码:
    # 保存最后一条未处理的消息
    if len(messageBuffer) > 0 and date and time and author:
        parsedData.append([date, time, author, ' '.join(messageBuffer)])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:49:08