Most concise way to select rows where any column contains a string in Pandas dataframe?

This question was not given an answer.. but the question itself and the comments has got the answer already which worked really well for me.. and I didn’t find the answer anywhereelse I looked.

So I just copy pasted the answer for someone who can find it useful. I added case=False for a case insensitive serach

Solution from @Reason:

the best I’ve come up with so far is the rather cumbersome

this one worked for me.

df[df.apply(lambda r: r.str.contains('b', case=False).any(), axis=1)] 

Solution from @rbinnun:

this one worked for me for a test dataset.. but for some real data set.. it returned a unicode error as below, but generally a good solution too I think

df[df.apply(lambda row: row.astype(str).str.contains('b', case=False).any(), axis=1)]

takes care of non-string columns, nans, etc.

UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 5: ordinal not in range(128)

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)