Как сравнить два CSV-файла в соответствии с определенной переменной (не строка за строкой) в Python? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть два CSV-файла, которые я конвертировал из файла JSON (скопируйте текст в EXCEL и конвертируйте в CSV-файл), формат немного запутанный, я хочу сравнить каждую целую строку по номеру ID, но проблема в IDчисло находится в разных столбцах для каждой строки, и я хочу напечатать разницу между двумя строками, которые имеют одинаковый идентификационный номер.

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

CSV_01:

age 10   height 150   ID  1001     sex F
age 10   height 150   ID  1001     sex M
ID 1001  height 150   age  12      sex M
age 10   ID  2002     height 151   sex F
age 10   height 150   ID  2002     sex M

CSV_02:

age 10   height 150   ID  2002     sex F
age 10   height 150   ID  1001     sex M
ID 1001  height 150   age  12      sex M
age 10   ID  1001     height 151   sex F
age 10   height 150   ID  2002     sex M

У меня почти 1000 строк и 500 столбцов (и для каждой строки он также содержит повторяющиеся идентичные идентификаторы)Примерно так: возраст 10 рост 150 ID 1001 пол M ... ID 1001 ...

Но я предполагаю, что это не имеет значения, но переменные имеют разные порядки, что означает, что в конечном итоге я хочу сравнить первые 3 строки в CVS_01 с 2-я, 3-я, 4-я строка в CSV_02 (потому что они имеют одинаковый идентификатор), но это всего лишь пример, поэтому в моем случае это должны быть разные номера строкларнабор данных ge.

Вот что я попробовал после импорта файлов CSV в Python:

resultBool01 = (CSV_01 != CSV_02).stack()  # Create Frame of comparison booleans
resultdiff01 = pd.concat([CSV_01.stack()[resultBool01], CSV_02.stack()[resultBool01]], 
axis=1)
resultdiff01.columns=["output_01", "output_02"]

Это дало мне разницу между каждой строкой (то есть: первая строка между двумя файлами), но это не то, что я хочу, потому что в первом ряду у них разные ID. Я застрял на несколько дней, не уверен, что это правильное направление, но это может быть сложнее, если я сравниваю файлы json или txt. Кто-нибудь может мне помочь? Большое спасибо.

1 Ответ

0 голосов
/ 21 октября 2019

Вы пытались преобразовать ваши данные в словарь?

Хотя файлы csv немного запутанны, по крайней мере, они имеют четко определенную структуру, и каждое имя поля присутствует перед его указанным значением.

Независимо от пробелов и других специальных символов, вы можете сначала проанализировать каждую строку csv для строки, сохранить каждую строку (или запись) как словарь уникальных точек данных и добавить его в список словарей. Затем вы можете работать с ним напрямую или экспортировать правильно отсортированный и выровненный CSV-файл для дальнейшего использования.

(я пока не могу комментировать, поэтому надеюсь, что этого достаточно, в противном случае я с радостью помогу сфактический код тоже)

Приложение:

Код может быть не идеальным для вашего конкретного файла, но он может служить основой для разработки вашего.

По сути, каждая строка, представленная в формате csv (на самом деле tsv):

fieldname   value   fieldname2   value2   fieldname3   value3

, и этот код будет считывать его и сохранять значение2 в качестве значения ключа "fieldname2"в новом словаре, который мы затем сохраняем в списке, а затем возвращаем из функции

def filereader(filename):
        _out = []
        with open(filename, 'r',  newline='', encoding='?????') as csvfile:
                csvfile = csv.reader(csvfile, delimiter='\t')
                for row in csvfile:
                        rowDict = {}
                        rowDict[row[0]] = row[1]
                        rowDict[row[2]] = row[3]
                        rowDict[row[4]] = row[5]
                        _out.append(rowDict)
        return _out
...