Hướng dẫn how to compare multiple csv files in python - cách so sánh nhiều tệp csv trong python

Điều này giả định rằng tất cả dữ liệu của bạn có thể phù hợp với bộ nhớ; Nếu không, bạn sẽ phải thử chỉ tải một số bộ tệp cùng một lúc hoặc thậm chí chỉ có hai tệp cùng một lúc.

Nó thực hiện so sánh và ghi đầu ra vào một tệp tóm tắt.csv, một hàng cho mỗi cặp tệp.

import csv
import glob
import os
import itertools

def get_data(fname):
    """
    Load a .csv file
    Returns a dict of {'exchange':float(price)}
    """
    with open(fname, 'rb') as inf:
        items = (row.split() for row in csv.reader(inf))
        return {item[0]:float(item[1]) for item in items}

def do_compare(a_name, a_data, b_name, b_data):
    """
    Compare two data files of {'key': float(value)}

    Returns a list of
      - the name of the first file
      - the name of the second file
      - the number of keys in A which are not in B
      - the number of keys in B which are not in A
      - the number of values in A less than the corresponding value in B
      - the number of values in A equal to the corresponding value in B
      - the number of values in A greater than the corresponding value in B
    """
    a_keys = set(a_data.iterkeys())
    b_keys = set(b_data.iterkeys())

    unique_to_a = len(a_keys - b_keys)
    unique_to_b = len(b_keys - a_keys)

    lt,eq,gt = 0,0,0
    pairs = ((a_data[key], b_data[key]) for key in a_keys & b_keys)
    for ai,bi in pairs:
        if ai < bi:
            lt +=1 
        elif ai == bi:
            eq += 1
        else:
            gt += 1

    return [a_name, b_name, unique_to_a, unique_to_b, lt, eq, gt]

def main():
    os.chdir('d:/tariff_compare')

    # load data from csv files
    data = {}
    for fname in glob.glob("*.csv"):
        data[fname] = get_data(fname)

    # do comparison
    files = data.keys()
    files.sort()
    with open('summary.csv', 'wb') as outf:
        outcsv = csv.writer(outf)
        outcsv.writerow(["File A", "File B", "Unique to A", "Unique to B", "A<B", "A==B", "A>B"])
        for a,b in itertools.combinations(files, 2):
            outcsv.writerow(do_compare(a, data[a], b, data[b]))

if __name__=="__main__":
    main()

Chỉnh sửa: User1277476 làm cho một điểm tốt; Nếu bạn sắp xếp trước các tệp của mình bằng cách trao đổi (hoặc nếu chúng đã được sắp xếp theo thứ tự), bạn có thể lặp lại đồng thời thông qua tất cả các tệp của bạn, không giữ được dòng hiện tại cho mỗi bộ nhớ. user1277476 makes a good point; if you pre-sort your files by exchange (or if they are already in sorted order), you could iterate simultaneously through all your files, keeping nothing but the current line for each in memory.

Điều này sẽ cho phép bạn thực hiện so sánh sâu hơn cho mỗi mục nhập Exchange - số lượng tệp chứa một giá trị hoặc giá trị n trên hoặc dưới, v.v.

Bài đăng này giải thích cách so sánh hai tệp CSV và in ra sự khác biệt trong Python.compare two CSV files and print out differences in Python.

Mục lục:

Bắt đầu nào.

Ví dụ Dữ liệu & Thư viện bổ trợ

Trước tiên chúng tôi phải nhập thư viện Pandas:

import pandas as pd                                 # Load pandas

Hơn nữa, hãy xem xét dữ liệu ví dụ dưới đây:

data1 = pd.DataFrame({'x1':range(0, 6),             # Create first pandas DataFrame
                      'x2':['x', 'y', 'x', 'x', 'y', 'x'],
                      'x3':range(2, 8)})
print(data1)                                        # Print first pandas DataFrame

Hướng dẫn how to compare multiple csv files in python - cách so sánh nhiều tệp csv trong python

data2 = pd.DataFrame({'x1':range(3, 8),             # Create second pandas DataFrame
                      'x2':['x', 'x', 'x', 'y', 'y'],
                      'x3':range(5, 10)})
print(data2)                                        # Print second pandas DataFrame

Hướng dẫn how to compare multiple csv files in python - cách so sánh nhiều tệp csv trong python

Đầu ra của cú pháp lập trình Python trước đó được hiển thị trong Bảng 1 và 2: Chúng tôi đã tạo hai khung dữ liệu gấu trúc với cùng một cột nhưng các giá trị khác nhau.

Hãy để Viết các khung dữ liệu gấu trúc này vào hai tệp CSV riêng biệt:

data1.to_csv('data1.csv', index = False)            # Export pandas DataFrames to CSV
data2.to_csv('data2.csv', index = False)

Sau khi cú pháp Python trước đó được thực thi, bạn sẽ tìm thấy nhiều tệp CSV trong thư mục làm việc hiện tại của mình. Hai tệp này sẽ được sử dụng làm cơ sở cho ví dụ sau.

Ví dụ: So sánh hai tệp CSV và in ra sự khác biệt

Cú pháp lập trình Python sau đây cho thấy cách so sánh và tìm sự khác biệt giữa các khung dữ liệu gấu trúc trong hai tệp CSV trong Python.

Chính xác hơn, chúng tôi đang tìm kiếm các hàng tồn tại trong khung dữ liệu gấu trúc thứ hai, nhưng không phải trong khung dữ liệu đầu tiên.

Trong bước đầu tiên của ví dụ này, chúng tôi đang nhập hai DataFrames Pandas:

with open('data1.csv', 'r') as csv1, open('data2.csv', 'r') as csv2:  # Import CSV files
    import1 = csv1.readlines()
    import2 = csv2.readlines()

Tiếp theo, chúng tôi đang sử dụng một vòng lặp để kiểm tra từng dòng trong tệp CSV thứ hai nếu nó tồn tại trong tệp CSV đầu tiên. Hơn nữa, chúng tôi đang tạo một tệp CSV mới chứa tất cả các hàng chỉ tồn tại trong tệp CSV thứ hai.

Làm thôi nào:

with open('data_diff.csv', 'w') as outFile:         # Create CSV file with differences
    for row in import2:
        if row not in import1:
            outFile.write(row)

Hướng dẫn how to compare multiple csv files in python - cách so sánh nhiều tệp csv trong python

Bảng 3 cho thấy đầu ra của cú pháp Python trước đó - một tập dữ liệu cho thấy sự khác biệt giữa khung dữ liệu Pandas thứ nhất và thứ hai.

Xin lưu ý rằng mã của hướng dẫn này một phần dựa trên chủ đề Overflow Stack này. Bạn có thể có một cái nhìn ở đó để biết thêm chi tiết về cách so sánh các bộ dữ liệu khác nhau được lưu trữ trong các tệp CSV trong Python.

Video & tài nguyên hơn nữa

Hãy xem video sau đây trên kênh YouTube thống kê. Tôi minh họa cú pháp lập trình Python của bài viết này trong video.

Video YouTube sẽ sớm được thêm vào.

Ngoài ra, bạn có thể đọc một số hướng dẫn liên quan trên trang web này. Một lựa chọn các bài báo được liệt kê ở đây.

  • Xử lý các khung dữ liệu bằng thư viện Pandas trong Python
  • So sánh hai khung dữ liệu gấu trúc trong Python
  • Tìm sự khác biệt giữa hai cột của Pandas DataFrame
  • So sánh các tiêu đề của hai khung gộp của gấu trúc trong Python
  • Kiểm tra xem hai khung dữ liệu gấu trúc có bằng nhau trong Python không
  • Đọc tệp CSV dưới dạng Pandas DataFrame trong Python
  • Chỉ đọc một số cột nhất định của tệp CSV dưới dạng pandas dataframe
  • Bỏ qua hàng nhưng hãy giữ tiêu đề khi đọc tệp CSV
  • Đọc từng dòng tệp CSV trong Python
  • Tất cả các hướng dẫn lập trình Python

Hướng dẫn này đã trình bày cách tìm sự khác biệt giữa hai tệp CSV trong ngôn ngữ lập trình Python. Nếu bạn có thêm câu hỏi, xin vui lòng cho tôi biết trong các ý kiến ​​dưới đây.find differences between two CSV files in the Python programming language. If you have additional questions, please let me know in the comments below.