2017-07-19 90 views
3

我有許多測試需要將熊貓數據框輸出與靜態基準文件進行比較。基準文件格式的首選選項是csv格式,因爲它在Git中的可讀性和易維護性。但如果我加載csv文件到一個數據幀,並使用將大熊貓數據框與csv文件進行比較的最佳方法

A.equals(B) 

其中A爲輸出數據幀和B是從CSV文件中加載的數據幀,難免會有作爲CSV文件中不存在錯誤記錄數據類型和什麼。所以我相當有意思的解決方案是將數據幀A寫入一個CSV文件,並以與B相同的方式加載它,然後詢問它們是否相等。

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

+0

嘗試尋找在兩個dataFrames,輸出數據幀,並且您使用從CSV加載之間的區別:(!(A = B).ANY(1))''和讓我知道,如果這作品,我無法測試這個自己,因爲重新創建你的情況並不容易 –

+0

謝謝。我可以問一下總和((A!= B).any(1))是做什麼的?我得到1的輸出。你在逐行比較嗎? – Spinor8

回答

0

我遇到了一個解決方案,通過使用Pandas測試工具爲我的案例工作。

from pandas.util.testing import assert_frame_equal 

然後從check_dtype設置爲False的嘗試除了塊之外調用它。

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

如果你所擔心的csv文件的數據類型,你可以加載它作爲特定數據類型一個數據幀如下:

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

這將確保CSV中的每一列,讀爲特定數據類型

後,你可以只用

A.equals(B) 

輕鬆地比較dataframes

編輯:

如果你需要比較大量的對,另一種方式來做到這將是代替比較比較各行和各列數據的dataframes的哈希值的幀

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

現在比較這兩個散列值,它們只是整數來檢查原始數據幀是否相同。

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

+0

感謝您的建議。我過去做過,但隨着測試文件數量的增加,這種方法效率不高。 – Spinor8

+0

你需要在你的python代碼中比較它們嗎? – Ankur

+0

是的。我有幾個用例。 1)用於測試2)驗證內存數據框和csv文件之間的現有數據是否相同。 – Spinor8

0

(A != B).any(1)返回布爾值的系列,它告訴你哪些行都是平等的,哪些不是?

布爾值內部由1和0的代表,所以你可以做一個總和()來檢查有多少行不相等。

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

如果你得到0的輸出,那就意味着所有的行都是相等的。

相關問題