ディレクトリ内の.jpgファイルを繰り返し処理して、aの単一列(image_name)の名前と一致させようとしています。 .csvファイル。ディレクトリ内のファイル名と、pythonの.csvファイル内の要素をpandasを使って照合しようとしています
エラーメッセージが表示されます。ValueError:Seriesの真理値が曖昧です。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。 コードを教えてもらえますか?
ディレクトリ内の.jpgファイルを繰り返し処理して、aの単一列(image_name)の名前と一致させようとしています。 .csvファイル。ディレクトリ内のファイル名と、pythonの.csvファイル内の要素をpandasを使って照合しようとしています
エラーメッセージが表示されます。ValueError:Seriesの真理値が曖昧です。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。 コードを教えてもらえますか?
行番号は含めませんが、エラーは行番号imagenames.iloc[i] == filename
にあると仮定します。 imagenames.iloc[i]
がPandasシリーズオブジェクト(単一の列を表す)になるため、このエラーが発生しています。
はimagenames.iloc[i]['image_name']
と置き換えて解決できますが、結果コードには2つのループがあり、多大な作業が必要になります。
代わりに、私は次の目的でリファクタリングお勧めします:
これを行うにはいくつかの方法がありますが、これらのリストの大きさについては言及していません。のは、彼らは次のようになり、データへのパンダベクトル化のアプローチに沿って、より多くのコードに近づくために、比較的小さな、一つの方法だと仮定しましょう:
imagenames=pd.read_csv('file.csv',header=0,usecols=['image_name'])
files_in_dir = os.listdir("directory")
matches = imagenames[imagenames['image_name'].isin(files_in_dir)]
.isin
は、ファイルのリストを検索されるように、これは超効率的ではありませんリストがかなり長い場合、潜在的に遅くなる可能性があります。あなたの状況に該当する場合は、セットまたは他の最適化の使用を検討することができます。
私はそれをこのようにしてください:素晴らしいザッツ
import os
import glob
import pandas as pd
mask = r'/path/to/*.jpg'
jpgs = [os.path.split(f)[1] for f in glob.glob(mask)]
imagenames = pd.read_csv('file.csv',usecols=['image_name'],squeeze=True)
print(imagenames[imagenames.isin(jpgs)])
を!問題を解決しました。 –