通过contains str过滤pandas数据帧行

Dav*_*vid 20 python string pandas

我有一个python pandas数据帧df,有很多行.从这些行中,我想切出来,只使用'body'列中包含单词'ball'的行.要做到这一点,我可以这样做:

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

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

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

但这不起作用.我不确定我是否应该在这个或那种性质的东西上使用lambda函数.

DSM*_*DSM 34

你可以.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
Run Code Online (Sandbox Code Playgroud)

(请注意,如果您要进行任务,那么使用它是一种更好的习惯df.loc,以避免可怕的SettingWithCopyWarning,但如果我们只是在这里选择它并不重要.)

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

  • 这个故事有点太长了,无法在评论中写在这里。您可以阅读 [本节](http://pandas-docs.github.io/pandas-docs-travis/indexing.html?highlight=settingwithcopywarning#returning-a-view-versus-a-copy) 的文档一个解释。 (2认同)