2017-08-25 16 views
0

検索は試しましたが、関連するものは何も表示されませんでした。または目を飛ばした可能性があります。Pandas DataFrameがリストにあります

だから、私が望むのはかなり特殊です。私はPandas DataFrameのリストを持っており、現在のステップ/ワークフローで作成されたデータフレームがすでにリストに存在しているかどうかを確認したい場合は、それをパスしたり追加したりします。今、私は、次の使用してみました:

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

これは、あなたがリストを乗り切るチェックするだろうかある一定のタイプのいくつかのオブジェクトが含まれています。私はこれをtackeにはどうすればよい

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 

:私は同じことを行うときには、私は次のエラーを受け取りますか?どんな仕事?

何か助けが大歓迎です。

おそらくおかげ

+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) 

パンダはdf.equals()と呼ばれるDFの平等をチェックするためにbuilt-in methodを持っています。基本的には、これをdf_listで繰り返して結果のリストを作成し、結果がTrue(つまり、同じdfがリストにある)かどうかを確認します。

+1

'not in list'は' any(list) 'と同じです。 – Delforge

+0

ありがとう@Yeile。これはまさに私が望んでいたものです。 :-) –

関連する問題