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

从Pandas DataFrame获取CSV文件名作为字典键时遇TypeError问题求助

问题原因

glob.glob(os.path.join('path/*.csv'))返回的是列表类型,而字典的键必须是可哈希的不可变类型(比如字符串、整数),列表是可变且不可哈希的,所以直接把filename(列表)作为errors的键会触发TypeError: unhashable type:list。

修复方案

需要遍历glob获取到的每个CSV文件路径(单个字符串),将其作为字典的键,同时针对每个文件单独执行校验逻辑:

import pandas as pd
import glob
import os

# 假设valid是已定义的校验规则字典
valid = {}

errors = {}

# 遍历每个CSV文件路径
for filename in glob.glob(os.path.join('path/*.csv')):
    # 读取当前文件
    df = pd.read_csv(filename)
    # 生成校验掩码
    mask = df.apply(lambda c: c.isin(valid.get(c.name, [])))
    # 获取所有无效值的位置和内容
    invalid_entries = df.mask(mask | df.eq(' ')).stack()
    # 为当前文件初始化错误列表(避免覆盖)
    errors[filename] = []
    # 遍历每个无效条目,添加到错误字典
    for (row_idx, col_name), value in invalid_entries.iteritems():
        errors[filename].append({
            "row": row_idx + 1,  # 转成人类习惯的行号(从1开始)
            "column": col_name,
            "message": f"{value} is invalid"
        })
关键修改点
  • 新增循环遍历每个CSV文件,将单个文件名(字符串)作为errors的键
  • 为每个文件单独读取数据、生成校验结果
  • 把错误信息以列表形式存储(一个文件可能有多个错误),避免后续错误覆盖之前的内容
  • 可选:将行号从0索引转为1索引,更符合日常使用习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:45:57