Сравнение двух файлов CSV с использованием списков и словарей - PullRequest
0 голосов
/ 16 октября 2018

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

Как я могу распечатать только соответствующие данные из файла 1?

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

(для дальнейшего разъяснения; я после Восточных и Северных в Файле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) 

1 Ответ

0 голосов
/ 16 октября 2018

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

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

Следующий код создаст pandas фрейм данных data со всеми записями 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-файла поставляются со строкой заголовка.

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

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

будет делать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...