2017-08-25 130 views
0

我試過搜索,但沒有看到任何相關的,或者它可能跳過了我的眼睛。大熊貓DataFrame存在列表

所以我想要的是非常具體。我有一個熊貓數據框的列表,我想檢查當前步驟/工作流中創建的數據框是否已經存在於列表中,如果是,則傳遞或附加到它。現在,我嘗試使用以下:

if df not in best_dfs: 
    # process something here 
    best_dfs.append(df) 
else: 
    pass 

這是你會怎麼做檢查度過一個列表包含固定類型的一些對象。但是,當我這樣做,我收到以下錯誤:

Traceback (most recent call last): 
File "C:/Projects/Barclays/Email Analytics/POC - Stop Cheque Classification/03_CodeBase/CodeBase/utils/FindBestDf.py", line 239, in <module> 
print(obj.find_(dfs)) 
File "C:/Projects/Barclays/Email Analytics/POC - Stop Cheque Classification/03_CodeBase/CodeBase/utils/FindBestDf.py", line 19, in find_ 
r = self.__driver(list_of_df) 
File "C:/Projects/Barclays/Email Analytics/POC - Stop Cheque Classification/03_CodeBase/CodeBase/utils/FindBestDf.py", line 201, in __driver 
if v[0] not in best_dfs: 
File "C:\Users\IBM_ADMIN\Anaconda3\lib\site-packages\pandas\core\ops.py", line 1296, in f 
return self._compare_frame(other, func, str_rep) 
File "C:\Users\IBM_ADMIN\Anaconda3\lib\site-packages\pandas\core\frame.py", line 3670, in _compare_frame 
raise ValueError('Can only compare identically-labeled ' 
ValueError: Can only compare identically-labeled DataFrame objects 

如何TACKE呢?任何工作?

任何幫助將不勝感激。

感謝

+1

爲什麼不用一個str作爲鍵和df作爲值並檢查str值?這裏的問題是,你試圖比較一個df的存在,但相等運算符只能比較相同的標記dfs – EdChum

+1

你能告訴我們更多關於這些數據框嗎?他們有相同的尺寸嗎?相同數量的列?它們如何獨特? –

回答

2

可能不是最有效的方式,但這個工程的大熊貓:

if not True in [df.equals(x) for x in df_list]: 
    df_list.append(df) 

大熊貓有built-in method檢查稱爲df.equals() DF平等。基本上你可以通過你的df_list迭代它來創建另一個結果列表,然後檢查是否有任何結果返回True(即列表中存在相同的df)。

+1

'在列表中不是True'相當於'any(list)' – Delforge

+0

謝謝@Yeile。這正是我想要的。 :-) –