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

Python遍历CSV统计词频时字典更新报错:'NoneType'无update属性

解决CSV文件词汇统计的字典合并问题

问题分析

你的代码存在两个核心问题:

  1. 字典更新逻辑错误:dict_napak_dir = dict_napak_dir.update(dict_napak_file) 这行代码会触发报错。因为字典的update()方法是原地修改字典,返回值为None。第一次执行后dict_napak_dir会被赋值为None,后续循环调用update()时就会触发AttributeError。
  2. 词汇计数未正确累加:直接用dict_napak_file.update(counts)合并单文件计数时,若多个文件有相同词汇,会直接覆盖之前的计数而非累加;同时你对中间字典的处理逻辑混乱,导致无法实现全局统计。

修复步骤

  1. 移除错误的赋值语句:直接调用dict_napak_dir.update(...),不要将返回值赋值给原字典。
  2. 调整计数累加逻辑:遍历每个文件的词汇计数,手动累加至总字典,避免覆盖问题。
  3. 修正路径字符串:root = D:\dir1\dir2\data 需要用引号包裹,否则会被当作变量而非字符串路径。

修复后的完整代码

import os
import pandas as pd

# 路径用引号包裹,避免语法错误,r前缀防止转义字符问题
root = r'D:\dir1\dir2\data'
ext = '.csv'

# 全局总统计字典
dict_napak_dir = {}

for datoteka in os.scandir(root):
    if datoteka.path.endswith(ext):
        df = pd.read_csv(datoteka, encoding='cp1252')
        fifth_column = df.iloc[:, 4]  # 取第5列(索引从0开始)
        counts = fifth_column.value_counts()
        
        # 遍历当前文件的词汇计数,累加至总字典
        for word, count in counts.items():
            if word in dict_napak_dir:
                dict_napak_dir[word] += count
            else:
                dict_napak_dir[word] = count

print("done")
# 打印总统计结果
print(dict_napak_dir)

补充说明

  • 如果需要保留每个文件的单独统计,可以在循环内创建临时字典,处理完文件后将其存入列表(比如file_counts_list.append(temp_dict)),或用文件名作为键存入另一个字典。
  • 若想简化代码,也可以用collections.defaultdict来自动处理键不存在的情况,减少判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:33:25