使用列表和字典比较两个CSV文件

时间:2018-10-16 05:58:15

标签: python list dictionary

我有两个CSV文件,第一个有3列和许多行,第二个有4列和许多行,我试图根据RemoveDes列表(在代码中)“ RemovedDes”从第一个文件中检索数据是文件2的过滤后的版本,已过滤掉文件2的“目标”列中第一个字母为“ E”的数据行。并非将使用文件1中的所有数据,仅使用与RemoveDes相对应的数据因此,为什么我需要比较两者。

如何仅打印文件1中的相关数据?

我知道这可能很容易,但是我对此并不陌生,非常感谢您的帮助,欢呼。

(为进一步说明,我在文件1中的Eastings和Northings之后,但需要使用“ 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 :(得分:0)

基于评论中的澄清,我建议采用以下方法:

  1. 使用pandas.DataFrame作为您选择的数据结构
  2. 执行列表的联接

以下代码将创建一个pandas数据帧data,其中包含file2的所有条目,并在列EastingNorthing中的相应条目进行扩展的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,:])

会做