Сравнение двух файлов CSV с использованием списков и словарей

1

У меня есть два CSV файла, первый из которых содержит 3 столбца и несколько строк, а второй - 4 столбца и несколько строк. Я пытаюсь получить данные из 1-го файла на основе списка RemoveDes (в коде), "RemovedDes" является фильтрованным версию файла 2, которая отфильтровывала строки данных, где первая буква "E" в столбце "Место назначения" файла 2. Не все данные из файла 1 будут использоваться, а только данные, соответствующие данным RemoveDes, поэтому почему я нужно сравнить эти два.

Как распечатать только данные из файла 1?

Я знаю, что это, вероятно, очень легко сделать, но я новичок в этом, любая помощь очень ценится, приветствует.

(для дальнейшего уточнения, я после Eastings и Northings в файле 1, но вам нужно использовать "RemovedDes" (который отфильтровывал ненужную информацию в File2), чтобы соответствовать данным в двух файлах)

File 1 Sample Data (many more rows):
Destination Easting Northing
    D4 .      102019 . 1018347
    D2 .      102385 . 2048908

File 2 Sample Data (many more rows):
Legend Destination Distance Width
 10       D4 .        67 .     87
 18       E2 .        32 .     44

Обратите внимание, что E2 отфильтровывается, когда он начинается с E.. См. Код ниже для пояснения.

Legend Destination Distance Width

    1stFile = open(file2.csv, 'r')
    FILE1 = 1stFile.readlines()
    print(FILE1)

  list_dictionary = []
    2ndFile = open(file2.csv, 'r') 
    FILE2 = 2ndFile.readlines()
    print(FILE2)
    for line in FILE2:
        values = line.split(',')
        Legend = values[0]
        Destination = values[1]
        Distance = values[2]
        Width = values[3]

        diction_list['LEG'] = Legend
        diction_list['DEST'] = Destination
        diction_list['DIST'] = Distance
        diction_list['WID'] = Width

        list_dictionary.append(the_dictionary)

    RemovedDes = [] 
    for line_dict in list_dictionary:
        if not li_dict['DEST'].startswith('E'): #Filters out rows of data which starts with the letter E in File 2.
            RemovedDes.append(li_dict)

    print(RemovedDes) 
  • 2
    Можете ли вы предоставить образцы данных ваших CSV-файлов?
  • 0
    Можете ли вы сказать нам, что в рамках выборки данных ожидаемый результат?
Показать ещё 4 комментария
Теги:
list
dictionary

1 ответ

0

Основываясь на пояснениях в комментариях, я предлагаю следующий подход:

  1. используйте pandas.DataFrame качестве вашей структуры данных по выбору
  2. выполнить объединение ваших списков

Следующий код создаст данные фрейма data pandas со всеми записями file2, расширенными их соответствующими записями в столбцах Easting и Northing file1

import pandas as pd

file1 = pd.read_csv('file1.csv')
file2 = pd.read_csv('file2.csv')

data = pd.merge(file2, file1, how = 'left', on = 'Destination')

Примечание: это предполагает, что Destination имеет уникальные значения по всей доске и что оба.csv-Files имеют строку заголовка.

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

for i in range(data.shape[0]):
   print(data.iloc[i,:])

Сделаю

  • 0
    Если вы хотите использовать только столбцы из file1 , вы можете добавить строку data1 = data[['Destination', 'Easting', 'Northing']] в мой фрагмент кода выше, чтобы создать фрейм данных только с строками из file2 и столбцы из file1 (хотя есть более эффективные способы достижения этого результата, поэтому, если это то, что вам нужно, дайте мне знать, и я напишу подробный подход).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню