Reputation: 775
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
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
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