2017-02-16 9 views
0

pandas.dataframe.duplicated отлично подходит для поиска повторяющихся строк по указанным столбцам в области данных.Получить дублированные строки в наборе данных большего размера с помощью pandas

Однако мой набор данных больше, чем то, что подходит в памяти (и даже больше, чем я мог бы вставить после его расширения в разумных бюджетных пределах).

Это хорошо для большинства анализов, которые я должен выполнить, поскольку я могу перебирать свой набор данных (файлы 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... 

 Смежные вопросы

  • Нет связанных вопросов^_^