Python比较两个CSV列表

2024-06-07 00:05:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较两个csv文件,并通过搜索找到具体的值。示例如下。在


一号文件

名字,姓氏,年龄

约翰,Doe,45岁

简,多伊,34岁

罗伯特,斯密特,27岁

鲍勃,怀特,56岁

卡里,伍兹,28岁


2号文件

名字

罗伯特


脚本应该使用文件2的FirstName列搜索文件1的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()

Tags: 文件csv代码inopenfirstname名字lower
3条回答

这对熊猫来说很简单!在

使用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

可能是这样吗?在

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'])

第二个不打印的原因是因为您在第一次迭代中读取了整个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())

这将产生:

^{pr2}$

满的_名称.csv包含:

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

第一个_名称.csv包含:

FirstName
Robert
Jane

相关问题 更多 >