如何在已经被正则表达式过滤的pandas DataFrame上使用.apply函数?

时间:2017-03-27 15:47:23

标签: python regex pandas dataframe

我有一个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中使用它时,我得到一个空系列。

我不确定我在哪里出错了。有什么指针吗?

1 个答案:

答案 0 :(得分:3)

你可以试试这个:

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]