Python pandas apply function if a column value is not NULL

2024/11/19 23:32:00

I have a dataframe (in Python 2.7, pandas 0.15.0):

df=A    B               C
0    NaN   11             NaN
1    two  NaN  ['foo', 'bar']
2  three   33             NaN

I want to apply a simple function for rows that does not contain NULL values in a specific column. My function is as simple as possible:

def my_func(row):print row

And my apply code is the following:

df[['A','B']].apply(lambda x: my_func(x) if(pd.notnull(x[0])) else x, axis = 1)

It works perfectly. If I want to check column 'B' for NULL values the pd.notnull() works perfectly as well. But if I select column 'C' that contains list objects:

df[['A','C']].apply(lambda x: my_func(x) if(pd.notnull(x[1])) else x, axis = 1)

then I get the following error message: ValueError: ('The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()', u'occurred at index 1')

Does anybody know why pd.notnull() works only for integer and string columns but not for 'list columns'?

And is there a nicer way to check for NULL values in column 'C' instead of this:

df[['A','C']].apply(lambda x: my_func(x) if(str(x[1]) != 'nan') else x, axis = 1)

Thank you!

Answer

The problem is that pd.notnull(['foo', 'bar']) operates elementwise and returns array([ True, True], dtype=bool). Your if condition trys to convert that to a boolean, and that's when you get the exception.

To fix it, you could simply wrap the isnull statement with np.all:

df[['A','C']].apply(lambda x: my_func(x) if(np.all(pd.notnull(x[1]))) else x, axis = 1)

Now you'll see that np.all(pd.notnull(['foo', 'bar'])) is indeed True.

https://en.xdnf.cn/q/26378.html

Related Q&A

python pip trouble installing from requirements.txt

Ive had great luck with pip in the past, but working at installing some stuff in a venv on is giving me some headaches. I keep getting errors likeNo distributions at all found for somepackage Storing d…

Using py.test with coverage doesnt include imports

For Jedi we want to generate our test coverage. There is a related question in stackoverflow, but it didnt help.Were using py.test as a test runner. However, we are unable to add the imports and other…

Determine if a Python class is an Abstract Base Class or Concrete

My Python application contains many abstract classes and implementations. For example:import abc import datetimeclass MessageDisplay(object):__metaclass__ = abc.ABCMeta@abc.abstractpropertydef display(…

Pandas printing ALL dtypes

This seems like a very simple problem, however its driving me round the bend. Im sure it should be solved by RTFM, but Ive looked at the options and I can see the one to fix it.I just want to print the…

Which Python API should be used with Mongo DB and Django

I have been going back and forth over which Python API to use when interacting with Mongo. I did a quick survey of the landscape and identified three leading candidates.PyMongo MongoEngine MingIf you w…

Save a list to a .txt file

Is there a function in python that allows us to save a list in a txt file and keep its format?If I have the list:values = [1,2,3]can I save it to a file that contains:[1,2,3]So far I print parts of th…

How to run a python script like pm2 for nodejs

Ive used pm2 for my Node.js script and I love it. Now I have a python script which collect streaming data on EC2. Sometimes the script bombs out and I would like a process manager to restart itself lik…

Resize rectangular image to square, keeping ratio and fill background with black

Im trying to resize a batch of grayscale images that are 256 x N pixels (N varies, but is always ≤256). My intention is to downscale the images.The resize would have to output a square (1:1) image, wi…

How to capture arbitrary paths at one route in FastAPI?

Im serving React app from FastAPI by mounting app.mount("/static", StaticFiles(directory="static"), name="static")@app.route(/session) async def renderReactApp(request: Re…

Changing the active class of a link with the twitter bootstrap css in python/flask

I got the following html snippet from my page template.html.<ul class=nav><li class="active"><a href=/>Home</a></li><li><a href=/lorem>Lorem</a>…