У вашей функции три основные проблемы.
Сначала вы пытаетесь присвоить значение v
.Но назначения - это утверждения, а не выражения.Вы не можете помещать операторы в выражения в Python, и lambda
является выражением.Но вы всегда можете просто использовать def
вместо:
def func(v, row):
v = '100' if row['Cambridge Parser'] == '3/31/1989'
table = etl.convert(table, 'Price List', func, pass_row=True)
Во-вторых, '100' if row['Cambridge Parser'] == '3/31/1989'
не является допустимым выражением в Python.if
операторы могут не требовать else
, но if
выражения делают.Таким образом, это должно выглядеть примерно так:
def func(v, row):
v = '100' if row['Cambridge Parser'] == '3/31/1989' else v
table = etl.convert(table, 'Price List', func, pass_row=True)
… или:
def func(v, row):
if row['Cambridge Parser'] == '3/31/1989':
v = '100'
table = etl.convert(table, 'Price List', func, pass_row=True)
Наконец, даже после того, как вы исправите это, присвоение значения v
невсе равно делать добро.v
- это просто имя параметра вашей функции.Связывать это имя с каким-либо другим значением бессмысленно;после выхода из функции этот параметр больше не существует.В частности, это не повлияет на то, какое значение было передано в функцию.
Если вы посмотрите на пример функции, она не пытается ничего присвоить, она просто возвращает новое значение.Что вы хотите сделать здесь.Итак, либо:
def func(v, row):
if row['Cambridge Parser'] == '3/31/1989':
return '100'
else:
return v
table = etl.convert(table, 'Price List', func, pass_row=True)
…, либо, если вы хотите сделать его максимально сжатым, даже если это означает, что вы не понимаете свой собственный код:
table = etl.convert(table, 'Price List', lambda v, row: '100' if row['Cambridge Parser'] == '3/31/1989' else v, pass_row=True)