提问者:小点点

无法基于子字符串集筛选pandas数据帧


目的是查找列中的每个单元格是否包含一组字符串中的任何一个字符串。

给出以下df;

df = pd.DataFrame({'Date': ['1 December 2020', 'May 2020', 'Random value', 'may 2019']})

和一个标志子字符串

stk_list = ['December','May']

它应该返回

True; True; False; True

但是,使用下面的代码

stk_list = ['December','May']
df = pd.DataFrame({'Date': ['1 December 2020', 'May 2020', 'Random value', 'may 2019']})
dfxx=df['Date'].isin(stk_list)

它返回

False; False;False;False

请问我哪里做错了?


共2个答案

匿名用户

您可以为此使用regex:

pattern = '|'.join(s.lower() for s in stk_list)

df.Date.str.lower().str.contains(pattern)

您可能希望修改pattern,使其只检查整个单词:

pattern = r"\b({})\b".format('|'.join(s.lower() for s in stk_list))

这里\b表示单词边界,因此该模式不会将maybe标记为true

匿名用户

您可以使用apply:

dfxx=df['Date'].apply(lambda x: any([i in x for i in stk_list])