2017-02-16 6 views
0

pandas.dataframe.duplicated은 데이터 프레임 내의 지정된 열에서 중복 행을 찾는 데 유용합니다.팬더가있는 메모리보다 큰 데이터 세트에서 중복 된 행 가져 오기

그러나 데이터 세트는 메모리에 맞는 것보다 크며 합당한 예산 한도 내에서 확장 한 후에도 적합합니다.

내 데이터 세트 (csv 및 dbf 파일)를 반복 할 수 있으므로 각 파일을 메모리에로드하고 순서대로 모든 작업을 수행해야하므로 대부분의 분석을 수행해야합니다. 그러나 중복 분석과 관련해서는 전체 데이터 세트에서 단일 파일 내에서만 중복 된 데이터를 찾는 데 적합하지 않습니다.

동시에 여러 메모리에 데이터를로드 할 필요없이 여러 데이터 프레임에서 중복 된 데이터를 찾을 수있는 알고리즘이나 접근법이 있습니까?

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