Gracias por ayudarme hoy con mi pregunta.

Tengo un df como este a continuación ingrese la descripción de la imagen aquí

Como puede ver, hay un tipo de dict en la columna valor

Hay tres claves para estos dict en la columna valor

ID de oferta, oferta_id y transacción

Intento crear una nueva columna que obtenga el valor de la identificación de la oferta y la oferta_id

Intenté usar lambda en esto pero falla

test2['test'] = transcript.value.apply(lambda x: list(x.values())[0] if (list(x.keys())[0] in ['offer id', 'offer_id']) )

Me pregunto por qué sigue diciendo "SyntaxError: sintaxis no válida".

Gracias de nuevo por ayudar!

-------------------solución--------------------

Gracias por toda su ayuda chicos

test1['test'] = test1.value.apply(lambda x: list(x.values())[0] if (list(x.keys())[0] in ['offer id', 'offer_id']) else np.NaN)

Agregando la declaración else funciona ...

La mejor

0
arrickx 7 feb. 2020 a las 05:37

2 respuestas

La mejor respuesta

Cuando usa if en una expresión, debe escribir una cláusula else también. Por ejemplo:

>>> x = 5
>>> 1 if x > 0 else 0
1
>>> 1 if x > 0
  File "<stdin>", line 1
    1 if x > 0
             ^
SyntaxError: invalid syntax

La razón es que una expresión debería dar como resultado un valor, por lo que if en una expresión no tiene sentido a menos que usted indique cuál debería ser el resultado en ambos casos. Si no dice cuál debería ser el resultado cuando la condición es falsa, entonces la expresión no daría lugar a un valor en ese caso.

Entonces, su código tiene un error de sintaxis porque no escribió else para decir cuál debería ser el resultado cuando list(x.keys())[0] no está en ['offer id', 'offer_id'].

0
kaya3 7 feb. 2020 a las 02:43

test2['test'] = transcript.value.apply(lambda x: list(x.values())[0] if (list(x.keys())[0] in ['offer id', 'offer_id']) else 'what do you want x to be if the if statement is not fulfilled?')

0
JYCH 7 feb. 2020 a las 02:45