#python #pandas
Вопрос:
У меня есть файл со столбцом с именем logo, в некоторых строках указан путь к изображению, а некоторые строки пусты. Я хочу заполнить пустые строки одной картинкой, и вот мой код, и я получил ошибку UnboundLocalError: локальная переменная ‘val’, на которую ссылались перед назначением
def g(row):
if row['logo'] == np.nan:
val = str(r"pathyellow_m.png")
else:
pass
return val
operator['logo'] = operator.apply(g, axis=1)
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-17-261a706495c6> in <module>
----> 1 operator['logo'] = operator.apply(g, axis=1)
~anaconda3libsite-packagespandascoreframe.py in apply(self, func, axis, raw, result_type, args, **kwds)
7546 kwds=kwds,
7547 )
-> 7548 return op.get_result()
7549
7550 def applymap(self, func) -> "DataFrame":
~anaconda3libsite-packagespandascoreapply.py in get_result(self)
178 return self.apply_raw()
179
--> 180 return self.apply_standard()
181
182 def apply_empty_result(self):
~anaconda3libsite-packagespandascoreapply.py in apply_standard(self)
269
270 def apply_standard(self):
--> 271 results, res_index = self.apply_series_generator()
272
273 # wrap results
~anaconda3libsite-packagespandascoreapply.py in apply_series_generator(self)
298 for i, v in enumerate(series_gen):
299 # ignore SettingWithCopy here in case the user mutates
--> 300 results[i] = self.f(v)
301 if isinstance(results[i], ABCSeries):
302 # If we have a view on v, we need to make a copy because
<ipython-input-16-1de3acee1278> in g(row)
4 else:
5 pass
----> 6 return val
UnboundLocalError: local variable 'val' referenced before assignment
Комментарии:
1. Если ваша функция
val
не определена дляelse
случаев.2.
val
определяется только в том случае, еслиrow['logo']
его нет. Если вы хотите использовать то, что есть вrow['logo']
if, если это не None, вам нужно сделатьval = row['logo']
это вelse
предложении.
Ответ №1:
если ваш код столкнулся с else, val не вызывается.
def g(row):
if row['logo'] == np.nan:
val = str(r"pathyellow_m.png")
return val
else:
pass
Ответ №2:
Проблема в том, что return val
функция будет возвращаться val
независимо от того, val
определена она или нет. если if
оператор принимает значение False, то он переходит в else
. Но else
ничего не делает из-за pass
этого .
val
определяется только в том случае, если row['logo']
это None
Тип. Но если это не так, то это переходит в else
утверждение.
Теперь return
Вэл казнен. Но val
не определено. Так что это Ошибка.
def g(row):
if row['logo'] == np.nan:
val = str(r"pathyellow_m.png")
return val
else:
pass