У меня есть два CSV-файла, каждый из которых содержит два идентификатора, и я пытаюсь найти несоответствия в данных.
Пока мой процесс таков:
- считывание Csv-файлов в кадр данных
- Объединить файлы с известным «хорошим» идентификатором
- Проверить наличие неравных значений в известном «проблемном» идентификаторе
Однако «проблемный» идентификатор должен быть числом, поскольку он был введен вручнуюлюди, это не всегда так - поэтому я воспринимаю оба как строку для сравнения.
Вот что у меня есть:
#Read the CRM files with the identifiers as strings (by not doing this one file reads as a string the other reads as a float by default)
NEW_CRM = pd.read_csv('C:\\myfilenew.csv', header=0, dtype={'CRM ID':str})
OLD_CRM = pd.read_csv('C:\\myfileold.csv', header=0, dtype={'NEW CRM ID':str})
Query1 = pd.merge(NEW_CRM, OLD_CRM, on='Known_Good_ID', how='left')
FinalTest = Query1.loc[Query1['CRM ID'.strip()] != Query1['NEW CRM ID'.strip()]]
Проблема в том, что даже с полосой () пустое значение в идентификаторе CRM по сравнению с пустым значением в новом идентификаторе CRM возвращается как не равное. Я не уверен, как лучше поступить, так как варианты включают в себя попытку преобразовать все в числовое значение, заполнение пустых строк и т. Д. Я думаю, что должен быть более элегантный способ справиться с этим.
Добавление (пример данных по запросу):
NEW_CRM:
Known_Good_Id, NEW CRM ID
100, 1005
101, 2003
102, abcd
103,
104, 4008
OLD_CRM:
Known_Good_Id, CRM ID
100, 1005
101, 2003
102, 9878
103,
104, 4002
107, 5005
Query1:
Known_Good_ID, NEW CRM ID, CRM ID
100, 1005, 1005
101, 2003, 2003
102, abcd, 9879
103,,
104, 4008, 4002
FinalTest Expected Result:
102, abcd, 9879
104, 4008, 4002
FinalTest Actual Result:
102, abcd, 9879
103,,
104, 4008, 4002
* Я не хочу возвращать запись 103 из-за пустых строк