Python 在全局集上迭代不会';不适用于if条件

Python 在全局集上迭代不会';不适用于if条件,python,csv,pandas,dataframe,glob,Python,Csv,Pandas,Dataframe,Glob,l有一个由一组字符串组成的列,如下所示: npa = pd.read_csv("file_names.csv", usecols=[3,5,6, 7, 8, 9], header=None) npa.iloc[:,0] XML_0_1841729699_001 XML_0_1841729699_00nn XML_0_1841729699_00145 XML_0_1841729699_00145 XML_0_1841729699_00178 XML_0_1841729699_001jklm XML

l有一个由一组字符串组成的列,如下所示:

npa = pd.read_csv("file_names.csv", usecols=[3,5,6, 7, 8, 9], header=None)
npa.iloc[:,0]
XML_0_1841729699_001
XML_0_1841729699_00nn
XML_0_1841729699_00145
XML_0_1841729699_00145
XML_0_1841729699_00178
XML_0_1841729699_001jklm
XML_0_1841729699_001fjmfd
我的png名称如下:

path_img = "/images"
os.chdir(path_img)
images_name = glob.glob("*.png")
set_img = set([x.rsplit('.', 1)[0] for x in images_name])
set_img
set(['XML_0_1841729699_001fjmfd', XML_0_1841729699_00145','XML_0_1841729699_001','XML_0_1841729699_00178'])
在进行处理之前,我要检查
set\u img
中的名称是否与数据帧中的名称匹配:

for i in range(1, 30):
    for img_name in set_img:
        if (img_name==npa.iloc[i,0]):  # 0 corresponds to the the column of string 
            print("it works")
但是,如果出现以下情况,则不会检查条件。 怎么了

编辑1:

f = open("file_names.csv", 'rt')
reader = csv.reader(f)
for row in reader:
    if cpt >= 1:  # skip header
        characs.append(str(row[5]))
    cpt += 1

path_img = "/images"
os.chdir(path_img)
images_name = glob.glob("*.png")
set_img = set([x.rsplit('.', 1)[0] for x in images_name])
mask = npa.iloc[:,0].isin(set_img)
for img in set_img:

    img = cv2.imread(path_img+'/'+ img +'.png')
    print(img.shape)

    images = []
    images_names = []
    WIDTH=[]
    HEIGHT=[]

    for i in range(1, nb_charac):
        if (img==npa[mask].iloc[i,0]):
            print("hello")
            coords = npa.iloc[[i]]
            charac = characs[i - 1]
我有以下错误:

 FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  if (img==npa[mask].iloc[i,0]):
Traceback (most recent call last):
  File "/to_test.py", line 186, in <module>
    if (img==npa[mask].iloc[i,0]):
  File "/usr/lib/python2.7/dist-packages/pandas/core/indexing.py", line 1225, in __getitem__
    return self._getitem_tuple(key)
  File "/usr/lib/python2.7/dist-packages/pandas/core/indexing.py", line 1449, in _getitem_tuple
    self._has_valid_tuple(tup)
  File "/usr/lib/python2.7/dist-packages/pandas/core/indexing.py", line 127, in _has_valid_tuple
    if not self._has_valid_type(k, i):
  File "/usr/lib/python2.7/dist-packages/pandas/core/indexing.py", line 1417, in _has_valid_type
    return self._is_valid_integer(key, axis)
  File "/usr/lib/python2.7/dist-packages/pandas/core/indexing.py", line 1431, in _is_valid_integer
    raise IndexError("single positional indexer is out-of-bounds")
IndexError: single positional indexer is out-of-bounds

EDIT2:

它一直工作到某一行,我得到以下错误:

    if (img==npa[mask][3][i]):
  File "/usr/lib/python2.7/dist-packages/pandas/core/series.py", line 557, in __getitem__
    result = self.index.get_value(self, key)
  File "/usr/lib/python2.7/dist-packages/pandas/core/index.py", line 1790, in get_value
    return self._engine.get_value(s, k)
  File "pandas/index.pyx", line 103, in pandas.index.IndexEngine.get_value (pandas/index.c:3204)
  File "pandas/index.pyx", line 111, in pandas.index.IndexEngine.get_value (pandas/index.c:2903)
  File "pandas/index.pyx", line 157, in pandas.index.IndexEngine.get_loc (pandas/index.c:3843)
  File "pandas/hashtable.pyx", line 303, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6525)
  File "pandas/hashtable.pyx", line 309, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6463)
KeyError: 2035

使用
isin
创建布尔掩码。然后使用该掩码过滤数据帧。这相当于遍历每一行并检查第一列是否在集合中

mask = npa.iloc[:,0].isin(set_img)
npa[mask]

使用
isin
创建布尔掩码。然后使用该掩码过滤数据帧。这相当于遍历每一行并检查第一列是否在集合中

mask = npa.iloc[:,0].isin(set_img)
npa[mask]

在if语句中,您删除了
iloc
,它应该是
if(img_name==npa.iloc[i,0])
。很抱歉,我写得不好。实际上,在我的代码中,我做了if(img_name==npa.iloc[i,0]),在你的if语句中,你删除了
iloc
,它应该是
if(img_name==npa.iloc[i,0])
。很抱歉,我写得不好。事实上,在我的代码中,如果(img_name==npa.iloc[i,0])不确定是否理解您的答案,我会这样做。我怎么能在if条件下的for循环中使用它if(img_name==npa[mask]):?我想是if(img==npa[mask].iloc[i,0]):@vincent你的循环除了打印什么都不做。我给你一种方法,一次检查每一行的条件。然后,您可以将数据帧减少到只有条件为true的行。这是一个非常典型的预处理步骤。你的问题不完全清楚,因为你没有生产任何东西。当然,我更新了我的代码。请查看更新。我不确定是否理解您的答案。我怎么能在if条件下的for循环中使用它if(img_name==npa[mask]):?我想是if(img==npa[mask].iloc[i,0]):@vincent你的循环除了打印什么都不做。我给你一种方法,一次检查每一行的条件。然后,您可以将数据帧减少到只有条件为true的行。这是一个非常典型的预处理步骤。你的问题不完全清楚,因为你没有生产任何东西。当然,我更新了我的代码。请查看更新
mask = npa.iloc[:,0].isin(set_img)
npa[mask]