我正在尝试比较两个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()
答案 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