按包含 str 过滤熊猫数据帧行
Posted
技术标签:
【中文标题】按包含 str 过滤熊猫数据帧行【英文标题】:Filtering pandas dataframe rows by contains str 【发布时间】:2015-12-13 11:48:59 【问题描述】:我有一个带有很多行的 python pandas 数据框df
。从这些行中,我想切出并仅使用“body”列中包含“ball”一词的行。为此,我可以这样做:
df[df['body'].str.contains('ball')]
问题是,我希望它不区分大小写,这意味着如果出现 Ball 或 bAll 这个词,我也会想要它们。进行不区分大小写搜索的一种方法是将字符串转换为小写,然后以这种方式进行搜索。我想知道如何去做。我试过了
df[df['body'].str.lower().contains('ball')]
但这不起作用。我不确定我是否应该在这个或那种性质的东西上使用 lambda 函数。
【问题讨论】:
【参考方案1】:您可以再次使用.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:我想我真的不需要在此处指定“圆形”..)
【讨论】:
太棒了。我接近链接str
事件。我不知道str.contains
有case=False
选项。那太棒了。再跟进:我收到了您提到的可怕的 SettingWithCopy 警告。你介意详细说明一下吗?我的目标是创建一个仅包含“ball”的行的新数据框
这个故事有点太长了,不能在 cmets 里写。您可以阅读文档的this section 以获得解释。
非常感谢。如何添加多个字符串进行过滤?以上是关于按包含 str 过滤熊猫数据帧行的主要内容,如果未能解决你的问题,请参考以下文章