【问题标题】:How to use .apply function on a pandas DataFrame that has been filtered by regex?如何在已被正则表达式过滤的 pandas DataFrame 上使用 .apply 函数?
【发布时间】:2017-08-20 10:13:08
【问题描述】:

我有一个 pandas DataFrame,其中包含从几个 Wiki 表中抓取的数据。 DataFrame 有一列名称,其中一些名称后跟“\r\n(主教练)”。我想删除它,所以我尝试了这个:

df['name'][df.name.str.contains(r'coach')] =\
df['name'][df.name.str.contains(r'coach')].apply(lambda x: x[0:-14])

当它运行时,我得到一个 SettingWithCopyWarning。我尝试按照SO Q&A 中的建议使用 .loc:

 mask = df.loc[:,'name'] == df['name'].str.contains(r'coach')

但是每个值都返回为 False,因此当我将它与我的 DataFrame 一起使用时,我得到一个空系列。

我不确定我哪里出了问题。有什么指点吗?

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    你可以试试这个:

    mask = df.name.str.contains(r'coach')]
    df.loc[mask, 'name'] = df.loc[mask, 'name'].str[:-14]
    

    或者正如@piRSquared 评论的那样,这条简单的线也应该可以工作:

    df.loc[mask, 'name'] = df.name.str[:-14]
    

    【讨论】:

    • 你不需要屏蔽两次。 df.name.str[:-14]
    • 哇,你们真快。非常感谢!
    猜你喜欢
    • 2016-09-02
    • 2017-08-29
    • 2021-11-28
    • 2016-06-08
    • 2021-05-09
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多