Python:比较两个CSV列表

时间:2017-01-12 19:16:33

标签: python csv

我正在尝试比较两个csv文件并搜索它们以查找特定值。示例如下。

FILE ONE

FirstName,LastName,Age

John,Doe,45

Jane,Doe,34

Robert,Smite,27岁

鲍勃,怀特,56岁

Cary,Woods,28岁

FILE TWO

罗伯特

脚本应该使用File Two的FirstName列在File One的FirstName列中搜索并返回年龄

结果 罗伯特,27岁 简,34岁

我的代码只输出Robert,27它不会继续搜索Jane的第二行。我尝试使用While循环但没有成功。任何帮助将不胜感激!谢谢!

仅供参考,我将通过一个超过10k行的文件搜索50多个项目。

以下代码:

import csv

FileOne = open('/FileOne')
FileOneReader = csv.DictReader(FileOne)

FileTwo = open('/FileTwo')
FileTwoReader = csv.DictReader(FileTwo)


for row in FileTwoReader:
    for row2 in FileOneReader:
        if row['FirstName'].lower() in row2['FirstName'].lower():
            print 'Name:' + row['FirstName'] + ' Age: ' +   row2['Age'].lower()

3 个答案:

答案 0 :(得分:1)

大熊猫很容易!

使用pandas导入两个csv文件,将第二个csv与第一个csv合并,然后选择所需的变量。

import pandas as pd
df1 = pd.DataFrame([['A', 'LastA', 30], ['B', 'LastB', 20], ['C', 'LastB', 10]],
                    columns=['FirstName', 'LastName', 'Age'])
df2 = pd.DataFrame([['A'], ['B']],
                   columns=['FirstName'])

df2.merge(df1, on='FirstName')[['FirstName', 'Age']]

## -- End pasted text --
Out[7]:
  FirstName  Age
0         A   30
1         B   20

答案 1 :(得分:0)

Mayeb是这样的?

import csv

FileOne = open('/FileOne')
FileOneReader = csv.DictReader(FileOne)

FileTwo = open('/FileTwo')
FileTwoReader = csv.DictReader(FileTwo)

names_to_check = []

for row in FileTwoReader:
    names_to_check.append(row['FirstName'].lower())

for row in FileOneReader:
    if row['FirstName'].lower() in names_to_check:
        print "Name: {} Age: {}".format(row['FirstName'], row['Age'])

答案 2 :(得分:0)

第二个不打印的原因是因为您在第一次迭代中正在读取整个csv.DictReader对象(iterator)。到第二次迭代时,你的一个iterators已经筋疲力尽,所以它不会返回任何内容。

您应该将数据保存在列表中并以此方式进行检查。这是一个指南:

# Use with statements whenever you're working with more than one file
with open('full_names.csv') as fileone, open('first_names.csv') as filetwo:
    full_table = list(csv.DictReader(fileone))
    small_table = list(csv.DictReader(filetwo))
    for row1 in full_table:
        for row2 in small_table:
            if row2['FirstName'].lower() == row1['FirstName'].lower():
                print('Name: ' + row2['FirstName'] + ', Age: '+ row1['Age'].lower())

这应该产生:

# Name: Jane, Age: 34
# Name: Robert, Age: 27

full_names.csv包含:

FirstName,LastName,Age
John,Doe,45
Jane,Doe,34
Robert,Smite,27
Bob,White,56
Cary,Woods,28

first_names.csv包含:

FirstName
Robert
Jane