pandas.dataframe.duplicated非常适合在数据帧内的指定列中查找重复的行。
但是,我的数据集大于内存容量(甚至大于在合理的预算限制内扩展后所能容纳的容量)。
这对于我必须执行的大多数分析都很好,因为我可以循环我的数据集(csv和dbf文件),将每个文件单独加载到内存中,并按顺序执行所有操作。然而,对于重复分析,这显然不适合在整个数据集中查找重复项,而只能在单个文件中查找重复项。
是否有任何算法或方法可以跨多个数据帧查找重复项,而不必同时将它们全部加载到内存中?
发布于 2017-02-16 23:37:42
您可以对"key“列的值进行散列处理,并维护您已经遇到的一组散列代码:
import hashlib
hash_set = set() # this will contain all the hash codes of rows seen
def is_duplicate(row):
m = hashlib.md5()
for c in ["column1", "column2", "column3"]:
m.update(row[c])
hash_code = m.digest()
if hash_code in hash_set:
return 1
hash_set.add(hash_code)
return 0
for df_path in [df1_path, df2_path, df3_path]: # iterate dataframes 1 by 1
df = pd.read_csv(df_path) # load the dataframe
df["duplicate"] = df.apply(is_duplicate, axis=1)
unique_df = df[df["duplicate"]==0] # a "globaly" unique dataframe
unique_df.pop("duplicate") # you don't need this column anymore
# YOUR CODE...发布于 2017-02-16 23:17:58
我会建议两件事。首先,如果可能,将数据帧加载到rdbms中。然后,您可以通过对键列进行分组来查找重复项。
其次,只从大文件中提取键列,并将它们相互比较。
尝试按文件中的键列对行进行排序,这样您只需将一行与下一行进行比较就可以检测到重复的行。
希望这能有所帮助。
https://stackoverflow.com/questions/42277561
复制相似问题