簡體   English   中英

將Pandas數據幀與csv文件進行比較的最佳方法

[英]Best way to compare Pandas dataframe with csv file

我有許多測試需要將Pandas數據幀輸出與靜態基線文件進行比較。 基線文件格式的首選選項是csv格式,因為它在Git中具有可讀性和易維護性。 但是,如果我要將csv文件加載到數據幀中,並使用

A.equals(B) 

其中A是輸出數據幀,B是從CSV文件加載的數據幀,不可避免地會出現錯誤,因為csv文件不記錄數據類型和什么不是。 因此,我相當設計的解決方案是將數據幀A寫入CSV文件並以與B相同的方式將其加載回來然后詢問它們是否相等。

有沒有人有一個更好的解決方案,他們已經使用了一段時間沒有任何問題?

如果您擔心csv文件的數據類型,可以將其作為具有特定數據類型的數據幀加載,如下所示:

import pandas as pd
B = pd.DataFrame('path_to_csv.csv', dtypes={"col1": "int", "col2": "float64", "col3": "object"} )

這將確保將csv的每一列讀取為特定數據類型

之后,您可以通過使用輕松比較數據幀

A.equals(B)

編輯:

如果你需要比較很多對,另一種方法是比較數據幀的哈希值,而不是比較各個數據幀的每一行和一列

hashA = hash(A.values.tobytes())
hashB = hash(B.values.tobytes())

現在比較這兩個僅為整數的哈希值,以檢查原始數據幀是否相同。

但要小心:我不確定原始數據框的數據類型是否重要。 一定要檢查一下。

(A != B).any(1)返回一個帶有布爾值的Series,它告訴你哪些行是相等的,哪些不是...

布爾值在內部由1和0表示,因此您可以執行求和()來檢查有多少行不相等。

sum((A != B).any(1))

如果輸出為0,則表示所有行都相等。

我通過使用Pandas測試實用程序找到了適用於我的案例的解決方案。

from pandas.util.testing import assert_frame_equal

然后從try除了塊中的check_dtype設置為False之外調用它。

try:
    assert_frame_equal(A, B, check_dtype=False)
    print("The dataframes are the same.")
except: 
    print("Please verify data integrity.")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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