Dan Steingart
Dan Steingart

Reputation: 775

How to filter a pandas dataframe based on the length of a entry

In a pandas dataframe I have a field 'amp' that should be populated by a list of length 495. Is there a panda-ic way to quickly filter on this length, such that all rows with field 'amp' are not equal to 495 are dropped?

I tried

df[len(df['amp']) == 495]

and this returned

KeyError: False

Upvotes: 26

Views: 25922

Answers (2)

SethMMorton
SethMMorton

Reputation: 48725

If you specifically need len, then @MaxU's answer is best.

For a more general solution, you can use the map method of a Series.

df[df['amp'].map(len) == 495]

This will apply len to each element, which is what you want. With this method, you can use any arbitrary function, not just len.

Upvotes: 58

MaxU - stand with Ukraine
MaxU - stand with Ukraine

Reputation: 210832

Try this:

df[df['amp'].str.len() == 495]

Demo:

In [77]: df
Out[77]:
                 a
0  [1, 2, 3, 4, 5]
1        [1, 2, 3]
2             [-1]

In [78]: df.a.str.len()
Out[78]:
0    5
1    3
2    1
Name: a, dtype: int64

In [79]: df[df.a.str.len() == 3]
Out[79]:
                 a
1        [1, 2, 3]

Upvotes: 10

Related Questions