![](/img/trans.png)
[英]Python: compare 3 columns in 2 csv files and output if they are equal
[英]Python - Compare 2 files with CSV module and 3 columns
我正在嘗試使用Python CSV模塊比較2個文件。
第一個CSV文件,如下所示:
Name N, Age, Pound
A, 1, 10
A, 2, 10
B, 2, 12
第二個CSV文件:
Name N, Age, Pound
A, 1, 10
A, 3, 8
C, 1, 7
如果“名稱”列和“年齡”列相等,則在輸出中返回兩個文件的磅數。
輸出文件示例:
Name, Age, Pound1, Pound2
A, 1, 10, 10
在Python 3.5代碼中:
import csv
import io
alist, blist = [], []
with open("hosts.csv", "r") as fileA:
reader = csv.reader(fileA, delimiter=',')
for row in reader:
alist.append(row)
with open("masterlist.csv", "r") as fileB:
reader = csv.reader(fileB, delimiter=',')
for row in reader:
blist.append(row)
first_set = set(map(tuple, alist))
secnd_set = set(map(tuple, blist))
matches = set(first_set).intersection(secnd_set)
print (matches)
但是只返回標題...
謝謝。
您可以嘗試以下方法:
import csv
file1 = list(csv.reader(open('first.csv')))
file2 = list(csv.reader(open('second.csv')))
new_columns = [[a[0], a[1], a[-1], b[-1]] for a, b in zip(file1[1:], file2[1:]) if a[:2] == b[:2]]
write = csv.writer(open('outputfile.csv'))
write.writerow(new_columns)
一種簡單的方法是使用熊貓:
import pandas as pd
# Load CSV files
df1 = pd.read_csv('first.csv')
df2 = pd.read_csv('second.csv')
# Merge tables
df = df1.merge(df2, on=['Name', 'Age'])
Name Age Pound_x Pound_y
0 A 1 10 10
# Rename Pound columns
df.rename(columns={'Pound_x': 'Pound1', 'Pound_y': 'Pound2'}, inplace=True)
Name Age Pound1 Pound2
0 A 1 10 10
# Write output to file
df.to_csv('output.csv', index=False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.