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

如何在Python字典的DataFrame中查找跨文件重复ID值

跨文件查找DataFrame中重复ID的解决方案

现有一个字典splitfiles,键是含"split.csv"的文件名,对应值是包含ID、Group列的DataFrame。需要查找所有文件中重复出现的ID值,但原代码因将DataFrame作为字典键触发TypeError: unhashable type: 'DataFrame',期望输出格式如duplicate values [2]。

原初始化代码

import pandas as pd
import os

folderpath= (r"path")

filenames = dict()
for file in os.listdir(folderpath):
    if file.endswith(".csv"):
        filenames[file] = pd.read_csv(os.path.join((folderpath), file))

splitfiles=({k:v for k,v in filenames.items() if 'split.csv' in k})

错误代码(触发TypeError)

rev_dict = {}
for key, value in splitfiles.items():
    rev_dict.setdefault(value, set()).add(key)
result = [key for key, values in rev_dict.items()
                              if len(values) > 1]

print("duplicate values", str(result))

错误原因

原代码试图将整个DataFrame作为rev_dict的键,但DataFrame是不可哈希的对象(unhashable type),无法作为字典的键使用。我们需要提取每个DataFrame中的ID列数据,而非整个DataFrame来做重复判断。

修正方案

基础版:仅获取重复ID值

收集所有文件中的ID值,统计出现次数后筛选出重复项:

# 收集所有文件中的ID
all_ids = []
for df in splitfiles.values():
    all_ids.extend(df['ID'].tolist())

# 统计每个ID的出现次数
id_counts = pd.Series(all_ids).value_counts()

# 筛选出重复的ID(出现次数>1)
duplicate_ids = id_counts[id_counts > 1].index.tolist()

# 输出结果
print(f"duplicate values {duplicate_ids}")

进阶版:同时获取重复ID所在的文件名

如果需要知道重复ID出现在哪些文件中,可记录每个ID对应的文件名集合:

id_files = {}
for filename, df in splitfiles.items():
    for id_val in df['ID'].unique():
        id_files.setdefault(id_val, set()).add(filename)

# 筛选出出现在多个文件中的ID
duplicate_ids_with_files = {id_val: files for id_val, files in id_files.items() if len(files) > 1}

print("重复ID及对应文件:")
for id_val, files in duplicate_ids_with_files.items():
    print(f"ID {id_val}: {', '.join(files)}")

以上方案既解决了原有的TypeError问题,又能准确得到跨文件重复的ID值,满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:45:18