Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

find out type/value of x in lambda x while using apply/pipe

I’m still running in errors when trying to write code where I use pipe/lambda on Series/Dataframes so I wondered if there is a way to debug my code to get better understanding.
Just a simple example:
I have a Series:

s = pd.Series([10,20,30,40,50])

If I want to add some number to each element I could use:

s.apply(lambda x : x+5)
#or
s.pipe(lambda x : x+5)

both works fine.
But if I want to use conditional lambda:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

s.apply(lambda x : x+5 if x>20 else 0) # works

s.pipe(lambda x : x+5 if x>20 else 0) # doesn't work

I get ValueError, the truth of a Series is ambiguous. If I wouldn’t know why I get the error here I would need to know what x is…
This is just an example, it’s NOT about how to get the conditional adding done. I just want to know what is happening there and therefore I need to know what is x while executing my code.

Here is my question. When working on more complex matters and running into errors, is there a way I can debug my code to get to know the type or value of the x at any moment in the lambda while executing the code? For example a print statement? It would help to understand why I fail sometimes.

>Solution :

This case:

The difference is that the x in apply is a single element of the Series, since the lambda function is applied to all elements one after the other. From the docs:

Parameters:
   func, function: Function to apply to each column or row.

In the case of pipe, the x is the series itself, which is why the conditional lambda doesn’t work (if x>20 doesn’t make sense). This is evident from the pipe docs:

Parameters:
    func, function: Function to apply to the Series/DataFrame.

General debugging:

Define a function instead of using a lambda expression, then you can add print statements as you desire:

def my_func(x):
    print(x)
    return x+5 if x>20 else 0


s.pipe(my_func)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading