簡體   English   中英

Python-比較2個文件和CSV模塊以及3列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM