通过contains str过滤pandas数据帧行

时间:2015-09-16 18:40:21

标签: python string pandas

我有一个包含很多行的python pandas数据帧df。从这些行中,我想切出来,只使用包含单词' ball'在'身体'柱。为此,我可以这样做:

df[df['body'].str.contains('ball')]

问题是,我希望它不区分大小写,这意味着如果Ball或bAll这个词出现,我也会想要那些。进行不区分大小写搜索的一种方法是将字符串转换为小写,然后搜索该方式。我想知道如何去做。我试过了

df[df['body'].str.lower().contains('ball')]

但这并不奏效。我不确定我是否应该在这个或那种性质的东西上使用lambda函数。

1 个答案:

答案 0 :(得分:28)

您可以再次使用.str来访问字符串方法,或者(更好的是,恕我直言)使用case=False来保证不区分大小写:

>>> df = pd.DataFrame({"body": ["ball", "red BALL", "round sphere"]})
>>> df[df["body"].str.contains("ball")]
   body
0  ball
>>> df[df["body"].str.lower().str.contains("ball")]
       body
0      ball
1  red BALL
>>> df[df["body"].str.contains("ball", case=False)]
       body
0      ball
1  red BALL
>>> df[df["body"].str.contains("ball", case=True)]
   body
0  ball

(请注意,如果您要进行分配,那么使用df.loc是一个更好的习惯,以避免可怕的SettingWithCopyWarning,但如果我们只是在这里选择它没关系。)

(注意#2:猜我真的不需要指定' round'那里......)