2017-02-16 123 views
0

pandas.dataframe.duplicated是伟大的一个数据帧中跨指定的列找到重复的行。获取重复的行与大熊猫

然而,我的数据集比内存(甚至比我所能合理的预算范围内延伸之后适合大)什么适合大。

对于我必须执行的大部分分析来说,这是很好的,因为我可以遍历数据集(csv和dbf文件),将每个文件自行加载到内存中,并按顺序执行所有操作。但是,对于重复分析,这显然不适合在整个数据集中查找重复数据,但仅适用于单个文件。

是否有任何算法或方法的同时不必将它们全部加载到内存在同一时间找到多个dataframes重复?

+0

如何散列行的值,寻找重复的哈希值? – AndreyF

回答

1

我会建议两件事。 首先是在可能的情况下将数据帧加载到rdbms中。 然后你可以通过分组键列找到重复。

二是,只提取从大文件中的键列,并相互比较这些。

尝试通过在文件中的键列的行进行排序,这样你就可以检测到重复,仅将下一个比较一行。

希望有所帮助。

1

您可以哈希“键”列的值,并维护一组哈希码你已经遇到过:

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...