Я довольно новичок в Python и очень плохо знаком с Pandas, и я пытаюсь анализировать данные в двух файлах CSV.Я беру подмножество записей в File1 и ищу те, которых нет в File2.Я читаю файлы во фрейм данных, создавая другой фрейм данных, который урезан до двух или трех ключевых столбцов, которые мне нужны, и использую объединение для сравнения результатов.
Файлы идентичны по структуре и заголовкам.Всего около 40 или 50 столбцов.Составной ключ, который меня волнует, - это сочетание «IDnum» и «Status», и все, что находится за его пределами, является просто контекстом, поэтому я соединил файлы в этих столбцах.
Что странно, так это то, что я получаюневерные результаты, когда я читаю весь файл, но если я вручную удаляю все ненужные столбцы, я получаю правильный результат.Я не уверен, почему это даже фактор, потому что я не изменяю строки и не меняю объединение атрибутов.
File1= pd.read_csv('PersonList1.csv', encoding='ANSI', index_col=False) # Read Source file into data frame
File2 = pd.read_csv('PersonList2.csv', encoding='ANSI', index_col=False) # Read Target CSV file in data frame
# Reduce number of columns
keep_col = ['ID_num', 'Status']
File1_keep_col = File1[keep_col]
# Filter down to the subset I want in File 1
File1ActivesBoolean = File1_keep_col['Status'] == 'A' # Returns boolean results
File1Actives = File1_keep_col[File1ActivesBoolean]
# Execute merge of File1 subset and get results
CompareJoin = pd.merge(File1Actives, File2,
on=['ID_num', 'Status'],
how='left',
indicator=True)
CompareBoolean = CompareJoin['_merge'] == 'left_only'
CompareResult = CompareJoin[CompareBoolean]
Когда я беру полный файл, я неправильно получаю 61926 записейв File1, которых нет в File2.Когда я удаляю все столбцы из файла 2, оставляя только столбцы «ID_num» и «Status», я получаю 627 (что правильно).Я знаю, что цифры не имеют большого значения без просмотра данных, но это на несколько порядков меньше, поэтому я уверен, что в этом объединении что-то не учтено, но не могу понять, что именно.Был бы очень признателен за любую помощь от профессионалов там.