【发布时间】:2019-04-19 09:10:34
【问题描述】:
所以我在 404 个 excel 文件中拆分了一个大数据框。数据框作为 ID 列,我必须:
- 查找是否存在重复行
- 如果出现重复行,输出包含重复行的两个文件
例如,假设键 ID 为“ID_101”的行包含在文件 #10 和文件 #209 中。该脚本应输出“重复行:ID_101 包含在文件 #10 和文件 #209 中”。
我尝试了这种方法:创建一个包含所有键 id 的 set,以及一个将每个 id 映射到一个文件的 dictionary。当我遍历文件及其行时
- 如果 ID 在集合中,它将查找字典并输出已找到该行的位置。
- 如果 ID 不在集合中,它会将其添加到集合中,并在字典中创建一个新条目,将该 ID 映射到当前文件
所以 MWE 应该是:
import os, sys, pandas
ids_set = set()
ids_map = dict()
for root, dirs, files in os.walk(sys.argv[1]):
for file in files:
in_file = pandas.read_excel(os.path.join(root, file), header=0, sheet_name="Results")
# Check for duplicated companies
this_ids = list(in_file['BvD ID number'])
for this_id in this_ids:
if this_id in ids_set:
print("ERROR: duplicate ID '{}', already found in '{}'".format(this_id, ids_map[this_id]))
else:
ids_set.add(this_id)
ids_map[this_id] = filen
问题是,在第 300 个文件中,当我尝试访问字典时出现 MemoryError,据说是因为它变得太大了。
如何使用如此大的数据框实现我的目的?
【问题讨论】:
-
您是要仅查找文件中的重复项,还是要查找文件中的重复项?另一件事是您可以删除
ids_set,而是检查if this_id in ids_map。 -
@QuangHoang 文件中的那些也算在内。查找集合比查找字典更快吗?
-
我相信是一样的。此外,您不需要创建
this_ids。您可以浏览列本身。
标签: python pandas dataframe bigdata