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